2017-06-05 71 views
0

從另一個看起來像它的舊堆棧文件完全按照需要,我向驗證程序添加了一個方法(應該)將輸入與禁用值列表進行比較,然後返回錯誤消息if輸入在列表中。jquery validate notEqualTo添加方法

jQuery.validator.addMethod('notEqualTo',function(value, element, param) { 
    var notEqual = true; 
    value = $.trim(value); 
     for (i = 0; i < param.length; i++) { 
     if (value == $.trim($(param[i]).val())) { notEqual = false; } 
     } 
     return this.optional(element) || notEqual; 
     },"The value you entered is not permitted in this field."); 

這個問題似乎在比較中。無論我將其指定爲禁用值,它總是返回true,當它看起來應該在匹配時返回false。

userloginname: { 
    required: true, 
    notEqualTo: ['password','anotherword','#email'] 

使用以上,如果用戶輸入「密碼」,「anotheword」,或用戶名相匹配的電子郵件領域,它應該設置notEqual =假,並拋出錯誤。

+0

哪裏是你的表的相關HTML標記? – Sparky

+0

仔細查看[.val()'](http://api.jquery.com/val/)的文檔,你會發現你的錯誤。您不需要使用'.val()'將一個變量與另一個變量進行比較。 – Sparky

回答

1

您似乎將表示代表另一個元素的id的單詞和字符串的字符串視爲同一事物。

notEqualTo: ['password','anotherword','#email'] 

前兩個參數問題的根源就在這裏:

if (value == $.trim($(param[i]).val())) 
  1. .val()只有for retrieving the value of a form element。您錯誤地將它附加到param這是一個表示單詞的變量。

  2. 結束語jQuery的功能,$()param[i],原來這個變量變成一個jQuery對象,這就是你不杉杉兩個參數的情況下需要。

簡單地比較兩個變量...

if (value === param[i]) 

DEMO:jsfiddle.net/kwxtvur8/

話雖這麼說,如果你的第三個參數是另一個字段的值,那麼你會需要與其他字符串參數分開處理。我推薦一種方法來處理將值與單詞進行比較(如我的演示中所示),以及另一種將此字段的值與另一個字段的值進行比較的完全獨立的方法。

$('#myform').validate({ 
    rules: { 
     userloginname: { 
      required: true, 
      notEqualTo: ['password', 'anotherword'], 
      notEqual: '#email' 
     } 
    } 
    .... 

notEqual方法:

jQuery.validator.addMethod('notEqual', function(value, element, param) { 
    value = $.trim(value); 
    return this.optional(element) || (value !== $.trim($(param).val())); 
}, "The value you entered is not permitted in this field."); 

DEMO 2:jsfiddle.net/hp1dgcug/

+0

謝謝@Sparky!你已經用一種像我這樣的涉獵者可以理解的方式來解釋它,並且非常感謝! – Steve