【问题标题】:How to conditionally execute a jquery validation?如何有条件地执行 jquery 验证?
【发布时间】:2011-02-23 02:10:46
【问题描述】:

我正在使用 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: {
           required: true,
           minlength: 10,
          if($("#HfId").val() == ""){ 
            remote: '<%=Url.Action("getClientMobNo", "Clients") %>'
             }
          },

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

【问题讨论】:

  • 也许如果您在 Url.Action 上有另一个参数表明您正在添加或更新某些内容并在服务器端脚本上编写正确的行为代码。
  • @Ronaldo 所以在 jquery 中是不可能的?我必须在服务器端做它...

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


【解决方案1】:

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

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

祝你好运。

编辑是因为服务器端验证而被退回,还是 Jquery 在它到达之前将其退回?

【讨论】:

    【解决方案2】:

    好吧,我会做这样的事情

    例如我的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>
    

    在这种情况下,验证规则 required=true 只有在 url 变量 "action" 中有“add”时才适用

    【讨论】:

      【解决方案3】:

      使用 jquery 扩展方法怎么样?如果它是新记录,则添加远程属性,如果它是和退出记录,则使用和空对象。

       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"
             }
           }
      

      【讨论】:

        【解决方案4】:

        您可以在验证规则初始化后强制删除规则,使用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,它也会默默地通过而不会出错(并且显然不会删除远程规则),因此它适用于添加和编辑状态。

        【讨论】:

        • 只需要调用validate()方法即可。
        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-12
          • 1970-01-01
          • 2011-02-21
          相关资源
          最近更新 更多