2012-02-01 68 views
2

我看到很多帮助为我的页面上的任何字段类型编写自定义jQuery验证,但是如何编写自定义验证方法,将多个字段的值纳入考虑(交叉验证)?我认为我应该做$.validator.addMethod来添加我的自定义方法,然后添加一个规则到验证器对象(而不是一个特定的字段),但我遇到了语法问题。谁能帮忙?如何使用jQuery进行交叉字段验证?

例如,

我有两个字段:日期和时间。我的形式是有效的只有:

  1. 两者都充满
  2. 的日期不是星期日
  3. 的时间是早上6点到下午6点
+0

你能举个例子吗?你想要执行哪种验证? – 2012-02-02 00:20:39

+1

我有两个字段:日期和时间。我的表格只有在以下情况下才有效:a)两者都已填写b)日期不是星期日c)时间是早上6点到下午6点 – 2012-02-02 00:49:26

回答

1

您确实需要在这里一些自定义的规则之间,但每种验证方法都不需要考虑多个字段。对我来说,您需要三条不同的规则:要求适用于两个字段(已内置),然后是时间规则(6AM - 6PM)和日期规则(不能是星期日)的自定义规则:

$.validator.addMethod("notsunday", function (value, element) { 
    var date = Date.parse(value); 
    return this.optional(element) || (date && date.getDay() !== 0); 
}); 

$.validator.addMethod("businesshours", function (value, element) { 
    var time = Date.parse(value); 
    return this.optional(element) || 
     (time && (time.getHours() >= 6 && time.getHours() <= 18)); 
}); 

$(document).ready(function() { 
    $("#test").validate({ 
     rules: { 
      date: { 
       required: true, 
       notsunday: true 
      }, 
      time: { 
       required: true, 
       businesshours: true 
      } 
     }, 
     messages: { 
      date: { 
       notsunday: "Can't be a Sunday!" 
      }, 
      time : { 
       businesshours: "Must be between 6AM and 6PM" 
      } 
     } 
    }); 
}); 

例子:http://jsfiddle.net/andrewwhitaker/7KFgn/

注意,此示例使用DateJS作出解析日期更加容易。

+0

这是我收到过的最好的答案。如果我能给你两个upvotes我会。我忽略了提到重要的规则是结果日期/时间(字段的组合)必须比现在更晚。我可以从你的例子中弄清楚如何做到这一点(通过将它附加到一个字段),但是我想知道是否有这样的事情,而不是“属于”一个字段,而是整个表单。 – 2012-02-02 03:42:29

+0

@JeremyFoster:我会用一个组合字段验证的例子来更新我的答案 – 2012-02-02 13:54:32