2012-02-01 65 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