【问题标题】:jQuery validation addmethod always return falsejQuery 验证 addmethod 总是返回 false
【发布时间】:2014-03-11 11:29:57
【问题描述】:

我正在使用 jQuery 1.7.2 和 jQuery 验证 1.8.2 我添加了 ajax,我检查响应所有正确的值也传递正确,但我仍然没有得到验证。这是我的代码

<script type="text/javascript">
$(document).ready(function () {
    var validator = $("#form1").validate({
      rules: {
        ctl00$ContentPlaceHolder$txCivilID: {
          required: true,
          rangelength: [12,12],
          digits: true,
          checkCivilID: true
        },
        ctl00$ContentPlaceHolder$txFirstName: {
          required: true
        },
        ctl00$ContentPlaceHolder$txLastName: {
          required: true
        },
        ctl00$ContentPlaceHolder$txMobile: {
          required: true,
          rangelength: [8,8],
          digits: true
        },
        ctl00$ContentPlaceHolder$dpUserType: {
          required: true
        }
      },
      messages: {
        ctl00$ContentPlaceHolder$txCivilID: {
          required: "Civil for is required!",
          rangelength: "Civil for should be {0} in length!",
          digits: "Civil for should be only numbers!"
        },
        ctl00$ContentPlaceHolder$txFirstName: "First Name is required!",
        ctl00$ContentPlaceHolder$txLastName: "Last Name is required!",
        ctl00$ContentPlaceHolder$txMobile: {
          required: "Mobile number is required!",
          rangelength: "Mobile number should be {0} in length!",
          digits: "Mobile number should be only numbers!"
        },
        ctl00$ContentPlaceHolder$dpUserType: "Select User Type !"
      },
      errorPlacement: function (error, element) {
        $('label[for="' + element.attr("id") + '"]').text(error.text());
      }
    });
    jQuery.validator.addMethod("checkCivilID", function (value, element) {
      var response = '';
      $.ajax({
        url: "CivilID.aspx/IsAlreadyAvailable",
        type: "POST",
        async: false,
        data: "{'civilID':'" + value + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
          return data.d == 0 ? true : false;
        }
      });
    }, "CivilID is Already Exists");
});
  </script>

我将 addMethod 更改为远程方法,现在我的代码如下所示,但它仍然相同:(

 <script type="text/javascript">
$(document).ready(function () {
    var validator = $("#form1").validate({
      rules: {
        ctl00$ContentPlaceHolder$txCivilID: {
          required: true,
          rangelength: [12,12],
          digits: true,
          remote: function () {
            var value = $('#<%=txCivilID.ClientID%>').val();
            var r = {
              contentType: "application/json; charset=utf-8",
              data: JSON.stringify({ civilID: value }),
              type: "POST",
              dataType: "json",
              url: "CivilID.aspx/IsAlreadyAvailable",
              //async: false,
              dataFilter: function (data) { return $.parseJSON(data).d }
            };
            return r;
          }
        },
        ctl00$ContentPlaceHolder$txFirstName: {
          required: true
        },
        ctl00$ContentPlaceHolder$txLastName: {
          required: true
        },
        ctl00$ContentPlaceHolder$txMobile: {
          required: true,
          rangelength: [8,8],
          digits: true
        },
        ctl00$ContentPlaceHolder$dpUserType: {
          required: true
        }
      },
      messages: {
        ctl00$ContentPlaceHolder$txCivilID: {
          required: "Civil for is required!",
          rangelength: "Civil for should be {0} in length!",
          digits: "Civil for should be only numbers!",
          remote:"CivilID is Already Exists"
        },
        ctl00$ContentPlaceHolder$txFirstName: "First Name is required!",
        ctl00$ContentPlaceHolder$txLastName: "Last Name is required!",
        ctl00$ContentPlaceHolder$txMobile: {
          required: "Mobile number is required!",
          rangelength: "Mobile number should be {0} in length!",
          digits: "Mobile number should be only numbers!"
        },
        ctl00$ContentPlaceHolder$dpUserType: "Select User Type !"
      },
      errorPlacement: function (error, element) {
        $('label[for="' + element.attr("id") + '"]').text(error.text());
      }
    });

    /*jQuery.validator.addMethod("checkCivilID", function (value, element) {
      var response = '';
      $.ajax({
        url: "CivilID.aspx/IsAlreadyAvailable",
        type: "POST",
        async: true,
        data: "{'civilID':'" + value + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
          return data.d == 0 ? true : false;
        }
      });
    }, "CivilID is Already Exists");*/
});

 </script>

【问题讨论】:

  • alert(data.data)会是什么结果?
  • 对不起,它是 data.d,当它已经存在时我得到 0,当它不存在时得到 1
  • @ArunPJohny 你的 jsfiddle 出错了
  • 既然可以使用remote 规则,为什么还要为此使用自定义方法?

标签: jquery asp.net jquery-validate


【解决方案1】:

我解决了这个问题,因为人们告诉我使用远程方法并且我这样做了,但它仍然给出了同样的问题。然后我开始改变网络服务的价值。它是第一个 bool,然后我更改为 Boolean,但仍然是相同的问题,现在我将其设为字符串并返回值 true 和 false。

Bingo 开始工作了 :D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多