JS實(shí)現(xiàn)支持Ajax驗(yàn)證的表單插件
來(lái)源:易賢網(wǎng) 閱讀:911 次 日期:2016-07-16 13:21:04
溫馨提示:易賢網(wǎng)小編為您整理了“JS實(shí)現(xiàn)支持Ajax驗(yàn)證的表單插件”,方便廣大網(wǎng)友查閱!

本文為大家分享了一個(gè)表單驗(yàn)證插件,支持ajax驗(yàn)證,使用起來(lái)很簡(jiǎn)單。

每個(gè)需要驗(yàn)證的表單元素下面有一個(gè)span標(biāo)簽,這個(gè)標(biāo)簽的class有一個(gè)valid表示需要驗(yàn)證,如果有nullable則表示可為空;rule表示驗(yàn)證規(guī)則,msg表示錯(cuò)誤提示信息;to表示要驗(yàn)證的元素的name值,如果元素是單個(gè)的,to可以不寫(xiě)。該插件會(huì)遍歷每個(gè)有valid的span標(biāo)簽,找出它前面需要驗(yàn)證的元素,根據(jù)rule驗(yàn)證,如果驗(yàn)證不通過(guò),則顯示邊框?yàn)榧t色,鼠標(biāo)放在元素上時(shí)顯示錯(cuò)誤信息。

驗(yàn)證時(shí)機(jī):1、點(diǎn)擊提交按鈕時(shí)顯式調(diào)用驗(yàn)證方法;2、當(dāng)元素觸發(fā)blur時(shí)驗(yàn)證。

插件代碼:

CSS:

.failvalid

{

  border: solid 2px red !important;

}

JS:

/**

* 驗(yàn)證插件

*/

SimpoValidate = {

  //驗(yàn)證規(guī)則

  rules: {

    int: /^[1-9]\d*$/,

    number: /^[+-]?\d*\.?\d+$/

  },

  //初始化

  init: function () {

    $(".valid").each(function () { //遍歷span

      if ($(this)[0].tagName.toLowerCase() == "span") {

        var validSpan = $(this);

        var to = validSpan.attr("to");

        var target;

        if (to) {

          target = $("input[name='" + to + "'],select[name='" + to + "'],textarea[name='" + to + "']");

        } else {

          var target = validSpan.prev();

        }

        if (target) {

          target.blur(function () {

            SimpoValidate.validOne(target, validSpan);

          });

        }

      }

    });

  },

  //驗(yàn)證全部,驗(yàn)證成功返回true

  valid: function () {

    SimpoValidate.ajaxCheckResult = true;

    var bl = true;

    $(".valid").each(function () { //遍歷span

      if ($(this)[0].tagName.toLowerCase() == "span") {

        var validSpan = $(this);

        var to = validSpan.attr("to");

        var target;

        if (to) {

          target = $("input[name='" + to + "'],select[name='" + to + "'],textarea[name='" + to + "']");

        } else {

          target = validSpan.prev();

        }

        if (target) {

          if (!SimpoValidate.validOne(target, validSpan)) {

            bl = false;

          }

        }

      }

    });

    return bl && SimpoValidate.ajaxCheckResult;

  },

  //單個(gè)驗(yàn)證,驗(yàn)證成功返回true

  validOne: function (target, validSpan) {

    SimpoValidate.removehilight(target, msg);

    var rule = SimpoValidate.getRule(validSpan);

    var msg = validSpan.attr("msg");

    var nullable = validSpan.attr("class").indexOf("nullable") == -1 ? false : true; //是否可為空

    var to = validSpan.attr("to");

    var ajaxAction = validSpan.attr("ajaxAction");

    if (target) {

      //checkbox或radio

      if (target[0].tagName.toLowerCase() == "input" && target.attr("type") && (target.attr("type").toLowerCase() == "checkbox" || target.attr("type").toLowerCase() == "radio")) {

        var checkedInput = $("input[name='" + to + "']:checked");

        if (!nullable) {

          if (checkedInput.length == 0) {

            SimpoValidate.hilight(target, msg);

            return false;

          }

        }

      }

      //input或select

      if (target[0].tagName.toLowerCase() == "input" || target[0].tagName.toLowerCase() == "select") {

        var val = target.val();

        if (!nullable) {

          if ($.trim(val) == "") {

            SimpoValidate.hilight(target, msg);

            return false;

          }

        }

        else {

          if ($.trim(val) == "") {

            SimpoValidate.removehilight(target, msg);

            return true;

          }

        }

        if (rule) {

          var reg = new RegExp(rule);

          if (!reg.test(val)) {

            SimpoValidate.hilight(target, msg);

            return false;

          }

        }

        if (ajaxAction) {

          SimpoValidate.ajaxCheck(target, val, ajaxAction);

        }

      }

      else if (target[0].tagName.toLowerCase() == "textarea") {

        var val = target.text();

        if (!nullable) {

          if ($.trim(val) == "") {

            SimpoValidate.hilight(target, msg);

            return false;

          }

        }

        else {

          if ($.trim(val) == "") {

            SimpoValidate.removehilight(target, msg);

            return true;

          }

        }

        if (rule) {

          var reg = new RegExp(rule);

          if (!reg.test(val)) {

            SimpoValidate.hilight(target, msg);

            return false;

          }

        }

        if (ajaxAction) {

          SimpoValidate.ajaxCheck(target, val, ajaxAction);

        }

      }

    }

    return true;

  },

  ajaxCheckResult: true,

  ajaxCheck: function (target, value, ajaxAction) {

    var targetName = target.attr("name");

    var data = new Object();

    data[targetName] = value;

    $.ajax({

      url: ajaxAction,

      type: "POST",

      data: data,

      async: false,

      success: function (data) {

        if (data.data == true) {

          SimpoValidate.removehilight(target);

        }

        else {

          SimpoValidate.ajaxCheckResult = false;

          SimpoValidate.hilight(target, data.data);

        }

      }

    });

  },

  //獲取驗(yàn)證規(guī)則

  getRule: function (validSpan) {

    var rule = validSpan.attr("rule");

    switch ($.trim(rule)) {

      case "int":

        return this.rules.int;

      case "number":

        return this.rules.number;

      default:

        return rule;

        break;

    }

  },

  //紅邊框及錯(cuò)誤提示

  hilight: function (target, msg) {

    target.addClass("failvalid");

    target.bind("mouseover", function (e) {

      SimpoValidate.tips(target, msg, e);

    });

    target.bind("mouseout", function () {

      SimpoValidate.removetips();

    });

  },

  //取消紅邊框及錯(cuò)誤提示

  removehilight: function (target) {

    target.unbind("mouseover");

    target.unbind("mouseout");

    target.removeClass("failvalid");

    SimpoValidate.removetips();

  },

  //顯示提示

  tips: function (target, text, e) {

    var divtipsstyle = "position: absolute; z-index:99999; left: 0; top: 0; background-color: #dceaf2; padding: 3px; border: solid 1px #6dbde4; visibility: hidden; line-height:20px; font-size:12px;";

    $("body").append("<div class='div-tips' style='" + divtipsstyle + "'>" + text + "</div>");

    var divtips = $(".div-tips");

    divtips.css("visibility", "visible");

    var top = e.clientY + $(window).scrollTop() - divtips.height() - 18;

    var left = e.clientX;

    divtips.css("top", top);

    divtips.css("left", left);

    $(target).mousemove(function (e) {

      var top = e.clientY + $(window).scrollTop() - divtips.height() - 18;

      var left = e.clientX;

      divtips.css("top", top);

      divtips.css("left", left);

    });

  },

  //移除提示

  removetips: function () {

    $(".div-tips").remove();

  }

};

$(function () {

  SimpoValidate.init();

});

如何使用:

Edit頁(yè)面:

@using Model.Suya;

@{

  ViewBag.Title = "Add";

  Layout = "~/Views/Shared/_Layout.cshtml";

}

@{

  List<sys_post> postList = (List<sys_post>)ViewData["postList"];

  sys_post post = (sys_post)ViewData["post"];

}

<script type="text/javascript">

  $(function () {

    //部門(mén)樹(shù)

    $('#dept').combotree({

      url: 'GetDeptTree',

      required: false,

      checkbox: true,

      onLoadSuccess: function () {

        $('#dept').combotree('setValue', "@(post.depCode)");

      }

    });

    //操作結(jié)果

    $("#ifrm").load(function (data) {

      var data = eval("(" + $("#ifrm").contents().find("body").html() + ")");

      alert(data.msg);

      if (data.ok) back();

    });

    $("select[name='postLevel']").find("option[value='@(post.postLevel)']").attr("selected", "selected");

  });

  //保存

  function save() {

    if (valid()) {

      $("#frm").submit();

    }

  }

  //驗(yàn)證

  function valid() {

    var dept = $("input[name='dept']");

    if (!dept.val()) {

      SimpoValidate.hilight(dept.parent(), "請(qǐng)選擇所屬部門(mén)");

    } else {

      SimpoValidate.removehilight(dept.parent());

    }

    return SimpoValidate.valid();

  }

  //返回

  function back() {

    parent.$('#ttTab').tabs('select', "崗位管理");

    var tab = parent.$('#ttTab').tabs('getSelected');

    tab.find("iframe").contents().find("#btnSearch").click();

    parent.$("#ttTab").tabs('close', '修改崗位信息');

  }

</script>

<div class="tiao">

  <input type="button" class="submit_btn" value="保存" onclick="save()" />

  <input type="button" class="submit_btn" value="返回" onclick="back()" />

</div>

<iframe id="ifrm" name="ifrm" style="display: none;"></iframe>

<form id="frm" method="post" enctype="multipart/form-data" action="/HR/PostManage/SaveEdit?id=@(post.id)"

target="ifrm">

<div class="adminMainContent">

  <div class="box">

    <div class="box-title">

      基礎(chǔ)信息

    </div>

    <div class="box-content">

      <table cellpadding="0" cellspacing="0" class="detail" width="100%">

        <tr>

          <td class="title">

            <span class="mst">*</span>崗位名稱:

          </td>

          <td style="width: 35%;">

            <input type="text" class="xinxi_txt" name="postName" value="@post.postName" />

            <span class="valid" msg="必填,且長(zhǎng)度不能超過(guò)50" rule="^(.|\n){0,50}$"></span>

          </td>

          <td class="title">

            <span class="mst">*</span>崗位編號(hào):

          </td>

          <td style="width: 35%;">

            <input type="text" class="xinxi_txt" name="postCode" value="@post.postCode" />

            <span class="valid" msg="必填,且長(zhǎng)度不能超過(guò)20" rule="^(.|\n){0,20}$" ajaxaction="/HR/PostManage/AjaxCheckPostCode?id=@post.id">

            </span>

          </td>

        </tr>

        <tr>

          <td class="title">

            <span class="mst">*</span> 所屬部門(mén):

          </td>

          <td style="width: 35%;">

            <input type="text" name="depCode" id="dept" class="easyui-combotree" style="height: 30px;" />

          </td>

          <td class="title">

            <span class="mst">*</span>匯報(bào)對(duì)象:

          </td>

          <td style="width: 35%;">

            <select class="xueli" name="reportPostCode" id="agreementType">

              <option value="" selected="selected">==請(qǐng)選擇==</option>

              @foreach (sys_post item in postList)

              {

                if (item.postCode == post.reportPostCode)

                {

                <option value="@item.postCode" selected="selected">@item.postName</option>

                }

                else

                {

                <option value="@item.postCode">@item.postName</option>

                }

              }

            </select>

            <span class="valid" msg="請(qǐng)選擇合同分類">

          </td>

        </tr>

        <tr>

          <td class="title">

            <span class="mst">*</span>崗位級(jí)別:

          </td>

          <td style="width: 35%;">

            <select class="xueli" name="postLevel">

              <option value="" selected="selected">==請(qǐng)選擇==</option>

              <option value="1">1</option>

              <option value="2">2</option>

              <option value="3">3</option>

              <option value="4">4</option>

              <option value="5">5</option>

              <option value="6">6</option>

            </select>

            <span class="valid" msg="請(qǐng)選擇崗位級(jí)別">

          </td>

          <td class="title">

          </td>

          <td style="width: 35%;">

          </td>

        </tr>

        <tr>

          <td class="title">

            <span class="mst">*</span>備注:

          </td>

          <td colspan="3" style="width: 35%;">

            <textarea name="remarks" style="width: 500px;">@post.remarks</textarea>

            <span class="valid" msg="長(zhǎng)度不得超過(guò)500" rule="^(.|\n){0,500}$"></span>

          </td>

        </tr>

      </table>

    </div>

  </div>

</div>

</form>

效果圖:

名單

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:JS實(shí)現(xiàn)支持Ajax驗(yàn)證的表單插件
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)