2010-11-11 82 views
9

有沒有辦法將動態參數傳遞到自定義jquery驗證方法?具體來說,我正在尋找一種方法來比較兩個控件,並希望將其中一個傳遞給另一個的驗證方法進行比較。jquery驗證器動態參數

這是我目前有:

//Add method 
$.validator.addMethod("lowerInt", function(value, element, params) { 
      alert('inside method'); 
      if (isNaN(parseInt(params))) 
       return true; 
      else 
       return parseInt(value) < parseInt(params); 
     }, $.validator.format("Please enter a number smaller than {0}")); 

//Set validation 
$("#form1").validate({ 
    rules: { 
     lowInt: { 
      required: true, 
      integer: true, 
      lowerInt: 8 //I would like to pass a dynamic value here 
     } 
    } 
}); 

如果我運行它上面的,它的作品,因爲它應該。如果我將傳遞給lowerInt的8更改爲$('#highInt')。val(),它似乎只將lowerInt函數的值設置爲一次,並且從不更新它。我意識到我可以通過調用$('#highInt')。val()來獲得方法內的值,但是我想盡可能地傳遞該值。

回答

15

我想傳遞的選擇,像這樣:

//Add method 
$.validator.addMethod("lowerInt", function(value, element, params) { 
    var hi = typeof params[0] == "string" ? 
      parseInt($(params[0]).val(), 10) : 
      params[0]; 
    if (isNaN(hi)) 
    return true; 
    else 
    return parseInt(value) < hi; 
}, $.validator.format("Please enter a number smaller than {0}")); 

//Set validation 
$("#form1").validate({ 
    rules: { 
    lowInt: { 
     required: true, 
     integer: true, 
     lowerInt: '#highInt' 
    } 
    } 
}); 

這個版本將是一個數字選擇,使它儘可能地靈活。

+1

的功能將這個輸出的消息「請比#highInt輸入一個數字小」?我很樂意爲用戶提供更友好的東西。 – jinglesthula 2014-02-28 22:41:36

3

使參數成爲函數。

$("#form1").validate({ 
    rules: { 
     lowInt: { 
      required: true, 
      integer: true, 
      lowerInt: function(){ return $('#highInt').val(); } 
     } 
    } 
}); 

然後你調用validate方法類似

var high = params[0]();