如何有条件地执行jquery验证?

时间:2010-05-24 03:46:58

标签: jquery asp.net-mvc jquery-validate attributes

我正在使用jquery验证插件验证表单......

 rules: {
    Name: "required",
    MobileNo: {
           required: true,
           minlength: 10, remote: '<%=Url.Action("getClientMobNo", "Clients") %>'
               },
    Address: "required"
            },
    messages: {
        Name: "please provide a client name",
        MobileNo: {
        required: "Please provide a mobile phone no",
        rangelength: jQuery.format("Enter at least {0} characters"),
        remote: jQuery.format("This MobileNo is already in use")
      },
      Address: "please provide client address"
   },

这在添加表单验证方面效果很好但我在这里使用相同的表单进行编辑他们可以使用相同的手机号,但我的插件验证了mobileno说已经有一个mobileno ...但是如何执行远程属性条件,

   MobileNo: {
           required: true,
           minlength: 10,
          if($("#HfId").val() == ""){ 
            remote: '<%=Url.Action("getClientMobNo", "Clients") %>'
             }
          },

这是一个有效的jquery条件验证语句....如何根据条件跳过远程属性....

5 个答案:

答案 0 :(得分:0)

你需要一些服务器端。要么处理编辑,要么应用不同的Url.Action。

要执行不同的操作来管理它正在编辑不以相同方式应用它们的详细信息,因此mobileno可以是相同的。

祝你好运。

编辑是否由于服务器端验证而退回,或者Jquery在它到达之前是否将其丢回?

答案 1 :(得分:0)

好吧,我会做这样的事情

例如我的php页面是member.php

添加,发送类似于member.php?action = add

的网址
<? 
$action = $_GET['action'];
?>
<script>
        $("#frmmember").validate({
      rules: { 
        name: { 
                <? if($action=='add') { ?>
                      required: true, 
               <? } ?>
                      rangelength: [4, 50] },
        email: { required: true, rangelength: [5, 50], email: true },
        phone: { required: true, number:true, rangelength: [7, 10] }
        },
      onkeyup: false
    });
</script>

在这种情况下,只有在url变量"action"

中有“添加”时,验证规则required = true才会适用

答案 2 :(得分:0)

使用jquery extend方法怎么样?添加远程属性(如果它是新记录)或使用空对象(如果已存在并退出记录)。

 rules: {
        Name: "required",
        MobileNo: $.extend(
          {
            required: true,
            minlength: 10
          },
          ($("#HfId").val() == "")?{remote: '<%=Url.Action("getClientMobNo", "Clients") %>'}:{}
        ),
        Address: "required",
        messages: {
            Name: "please provide a client name",
            MobileNo: {
              required: "Please provide a mobile phone no",
              rangelength: "Enter at least {0} characters",
              remote: "This MobileNo is already in use"
            },
          Address: "please provide client address"
       }
     }

答案 3 :(得分:0)

使用rules('remove') method初始化验证规则后,您可以强制删除规则。

$('#yourForm').validate({
  rules: {
    Name: "required",
    MobileNo: {
      required: true,
      minlength: 10, remote: '<%=Url.Action("getClientMobNo", "Clients") %>'
    },
    Address: "required"
  },
  messages: {
    Name: "please provide a client name",
    MobileNo: {
      required: "Please provide a mobile phone no",
      rangelength: jQuery.format("Enter at least {0} characters"),
      remote: jQuery.format("This MobileNo is already in use")
    },
    Address: "please provide client address"
  }
});

if ($('#HfId').val() !== '')
  $('#MobileNo').rules('remove', 'remote');

这样您就不必使用内联逻辑来混淆共享声明规则。即使添加页面上不存在#HfId,它也会默默无声地出现(显然没有删除远程规则),因此它适用于添加和编辑状态。

答案 4 :(得分:0)

我很惊讶没有人提到这样做,但我建议使用添加规则方法。创建验证对象后,可以根据需要动态地向对象添加规则。

 if($("#HfId").val() == "") {
      $("#MobileNo").rules("add", {
          remote: '<%=Url.Action("getClientMobNo", "Clients") %>'
      });
 }

这样做的好处是,如果在插入新记录时要添加多个规则,则可以将它们全部分组到一个位置。如果逻辑变得更复杂,您还可以多次调用add。我更喜欢在需要时添加东西,然后调用remove来取走它们。您在致电validate()后执行此操作。