2014-09-28 42 views
0

對於下面的代碼,jQuery.validator.addMethod和所需VS可選

jQuery.validator.addMethod 
(
     "exactlength", 

     function(value, element, param) 
     { 
      return this.optional(element) || value.length == param; 
     }, 

     jQuery.format("Please enter exactly {0} characters.") 
); 

我明白

  • value指輸入字段值
  • element指輸入字段本身
  • param是指該規則
  • 屬性值
  • value.length == param指的是實際驗證

,但我不明白爲什麼this.optional(element) ||已經包含了所需的字段。我見過的大多數例子都是addMethod,似乎有這部分條款。但爲什麼它是強制性的,即使對於required的田地也是如此。

其次,假設我想電子郵件驗證,我想補充一些像

email: 
{ 
    required: true, 
    email: true, 
}, 

我還要補充以下,

jQuery.validator.addMethod 
(
     "minLengthID", 

     function(value, element, param) 
     { 
      return this.optional(element) || value.length >= param; 
     }, 

     jQuery.format("Please enter more than {0} characters.") 
); 


jQuery.validator.addMethod 
(
     "maxLengthID", 

     function(value, element, param) 
     { 
      return this.optional(element) || value.length <= param; 
     }, 

     jQuery.format("Please enter less than {0} characters.") 
); 

,但我不明白爲什麼this.optional(element) ||是必要的這裏。我會很感激任何方向。

回答

2

首先,minlengthmaxlengthemail規則一起工作得很好。

$('#myform').validate({ 
    rules: { 
     emailaddress: { 
      required: true, 
      email: true, 
      minlength: 6, 
      maxlength: 30 
     } 
    } 
}); 

DEMO: http://jsfiddle.net/arex5q69/

但要注意,你會需要的minlengthmaxlength規則進行評估之前,以滿足email規則。另請注意,一個非常短的電子郵件地址[email protected]是六個字符長,因此您的minlength: 6規則立即得到滿足。

相反,如果你把minlengthmaxlength規則email規則之前,那麼他們將首先評估。

$('#myform').validate({ 
    rules: { 
     emailaddress: { 
      required: true, 
      minlength: 6, 
      maxlength: 30, 
      email: true 
     } 
    } 
}); 

DEMO 2: http://jsfiddle.net/arex5q69/1/


this.optional(element) ||作爲您的自定義規則的一部分只是讓你的領域可選當該規則被單獨使用。

然而,當你與一個required: true結合您的「可選」的自定義規則,這是一個有爭議的問題,因爲該領域將永遠是可選的。

this.optional(element) ||放入您的自定義規則中的原因是,它使您無論是否使用required規則都可以在字段上使用它。

否則,如果你離開了this.optional(element) ||,您的自定義規則將總是讓現場required,即使你可能不希望外地required

+0

謝謝你的Sparky。尼斯解釋說,但我如何確保'@'之前的電子郵件ID在最小和最大限度之間? – Grateful 2014-09-28 09:30:20

+0

@高興,沒有提供標準的方法,只檢查'@'之前的部分電子郵件地址。你需要編寫一個自定義的方法,在檢查任何長度之前,將「value」分開,但這不是你在你的OP中所要求的,它被命名爲「...... required和optional」。 – Sparky 2014-09-28 15:52:32

+0

好的,我很感謝你的回答。另外,我意識到上述問題更多地是針對原始問題的後續工作......這是否違反了計算器規則? 也許我需要問這個「第二次後續」作爲一個單獨的問題以及:) – Grateful 2014-09-28 16:36:25