2010-11-11 84 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]();