jQuery验证不正确

时间:2016-08-07 04:16:44

标签: jquery jquery-validate

我目前有一个表单,我正在使用jQuery验证器插件进行验证。在表单中,我有一个字段,根据输入的另一个字段,是否需要。

 <select name="supportiveServices" id="supportiveServices" style="float: left; margin-left: 20px; width: 30%;">
        <option value="">Select One</option>
        <option value="Accepted">Accepted</option>
        <option value="Declined">Declined</option>
    </select>


 <input name= "serviceStartDate" id= "serviceStartDate" type="date" style="width: 50%;"></input>

的jQuery

 serviceStartDate: {
            required: function(element) {
                 if($("#supportiveServices").val() == 'Accepted') {
                    return true;
                }
                 else {
                    return false;
                 }
            },

        },

这种依赖性要求似乎工作正常,但我一直遇到的问题是我需要日期才有效。我添加了一种确保日期有效的方法。

jQuery.validator.addMethod("DateFormat",
    function(value, element) {
    return value.match(/^\d\d?\/\d\d?\/\d\d\d\d$/);
 },
  "Please enter a date in the format dd/mm/yyyy";
 ); 

我是这个插件的新手,但我尝试了以下两个解决方案,两个都返回true并需要输入:

  1. 创建一个函数,如果日期为空则基本返回true,否则返回false。

    serviceStartDate: {
            required: function(element) {
                 if($("#supportiveServices").val() == 'Accepted') {
                    return true;
                }
                 else {
                    return false;
                 }
            },
    
            DateFormat: function(element) {
                if($("#serviceStartDate").val() != 0 || $("#serviceStartDate").val() != null || $("#serviceStartDate").val() != undefined || $("#serviceStartDate").val() != '') {
                    return true;
                } else {
                    return false;
                }
            }
    
        }, 
    
  2. 创建单独的方法。

     jQuery.validator.addMethod("DateFormatSupport",
          function(value, element) {
             if ($("#serviceStartDate") == 0 ) {
             return value.match(/^\d\d?\/\d\d?\/\d\d\d\d$/);
           } 
        },
         "Please enter a date in the format dd/mm/yyyy"//removed ;
        );
    
  3. 并调用它。

            serviceStartDate: {
                required: function(element) {
                     if($("#supportiveServices").val() == 'Accepted') {
                        return true;
                    }
                     else {
                        return false;
                     }
                },
    
                DateFormatSupport: true
                }
    
            },
    

    我基本上需要验证器来确保如果客户没有选择&#34;接受&#34;对于支持服务,serviceStartDate可以是可选的。如果&#34;接受&#34;选择支持服务时,需要填写serviceStartDate,日期也需要有效。作为预防措施,我想如果他们在serviceStartDate中填写任何内容,无论是否是可选的,都是一个日期 - 这将转到数据库,因此它必须为null或日期。

    有什么建议吗?

1 个答案:

答案 0 :(得分:0)

  

我想如果他们填写serviceStartDate中的任何内容,无论是否可选,都是约会......有什么建议吗?

您只需要在日期字段中声明内置date规则,同时使required规则依赖于您已经完成的select元素。在这种情况下不需要自定义规则。也没有必要使date规则成为条件,因为只要可选字段留空,所有规则都会被自动忽略。

rules: {
    supportiveServices: {
        required: true
    },
    serviceStartDate: {
        required: function(element) {
            return ($("#supportiveServices").val() == 'Accepted') ? true : false;
        },
        date: true
    }
}

工作演示:jsfiddle.net/y1Lytetm/

备注

  • 我使用ternary shorthand作为条件...这是一行代码替换六行。

  • 没有input 容器 这样的内容,所以我删除了结束</input>标记,但没有存在为有效的HTML。