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

如何有条件地执行jquery验证?,jquery,asp.net-mvc,jquery-validate,attributes,Jquery,Asp.net Mvc,Jquery Validate,Attributes,我正在使用jquery验证插件验证表单 rules: { Name: "required", MobileNo: { required: true, minlength: 10, remote: '<%=Url.Action("getClientMobNo", "Clients") %>' }, Address: "required" }, messag

我正在使用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"
   },
规则:{
名称:“必需”,
美孚利诺:{
要求:正确,
minlength:10,远程:“”
},
地址:“必填”
},
信息:{
名称:“请提供客户名称”,
美孚利诺:{
必填:“请提供手机号码”,
rangelength:jQuery.format(“输入至少{0}个字符”),
remote:jQuery.format(“此MobileNo已在使用”)
},
地址:“请提供客户地址”
},
这在添加表单验证上非常有效,但我使用相同的表单进行编辑,他们可以使用相同的手机号码,但我的插件验证mobileno,说已经有一个mobileno。。。但是如何根据条件执行远程属性

   MobileNo: {
           required: true,
           minlength: 10,
          if($("#HfId").val() == ""){ 
            remote: '<%=Url.Action("getClientMobNo", "Clients") %>'
             }
          },
MobileNo:{
要求:正确,
最小长度:10,
如果($(“#HfId”).val()==”){
远程:“”
}
},

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

您将需要一些服务器端。处理编辑或应用其他Url.Action

执行不同的网络操作以管理它正在编辑细节,而不是以相同的方式应用它们,因此mobileno可以是相同的

祝你好运


Edit它是因为服务器端验证而抛出的,还是Jquery在它到达之前就抛出的?

好吧,我会这样做

例如,我的php页面是member.php

要添加,请发送一个URL,如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>

$(“#frmmember”).validate({
规则:{
姓名:{
要求:正确,
rangelength:[4,50]},
电子邮件:{必需:true,rangelength:[5,50],电子邮件:true},
电话:{required:true,number:true,rangelength:[7,10]}
},
onkeyup:false
});

在这种情况下,验证规则required=true仅在url变量
“action”

中有“add”时才适用。使用jquery extend方法怎么样?如果是新记录,则添加远程属性;如果是和正在退出的记录,则添加use和empty对象

 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"
       }
     }
规则:{
名称:“必需”,
MobileNo:$.extend(
{
要求:正确,
最小长度:10
},
($(“#HfId”).val()==”)?{remote:}:{}
),
地址:“必填”,
信息:{
名称:“请提供客户名称”,
美孚利诺:{
必填:“请提供手机号码”,
rangelength:“至少输入{0}个字符”,
远程:“此MobileNo已在使用”
},
地址:“请提供客户地址”
}
}

您可以在验证规则初始化后使用强制删除规则

$('yourForm')。验证({
规则:{
名称:“必需”,
美孚利诺:{
要求:正确,
minlength:10,远程:“”
},
地址:“必填”
},
信息:{
名称:“请提供客户名称”,
美孚利诺:{
必填:“请提供手机号码”,
rangelength:jQuery.format(“输入至少{0}个字符”),
remote:jQuery.format(“此MobileNo已在使用”)
},
地址:“请提供客户地址”
}
});
如果($('#HfId').val()!='')
$('MobileNo')。规则('remove','remote');

这样,您就不必将共享的声明性规则与内联逻辑混在一起。即使添加页面上不存在#HfId,它也会自动失效,不会出错(显然也不会删除远程规则),因此它适用于添加和编辑状态。

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

 if($("#HfId").val() == "") {
      $("#MobileNo").rules("add", {
          remote: '<%=Url.Action("getClientMobNo", "Clients") %>'
      });
 }
if($(“#HfId”).val(){
$(“#MobileNo”)。规则(“添加”{
远程:“”
});
}

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

后执行此操作,可能是因为Url上有另一个参数。操作表明您正在添加或更新某些内容,并在服务器端脚本上编写正确的行为代码。@Ronaldo所以在jquery中不可能这样做?我必须在服务器端完成这项工作……只需要在调用validate()方法之后。
 if($("#HfId").val() == "") {
      $("#MobileNo").rules("add", {
          remote: '<%=Url.Action("getClientMobNo", "Clients") %>'
      });
 }