Jquery Validator动态参数

时间:2010-11-11 15:55:10

标签: jquery jquery-validate

有没有办法将动态参数传递给自定义jquery验证方法?具体来说,我正在寻找一种方法来比较2个控件,并希望将一个控件传递给另一个的验证方法进行比较。

以下是我目前的情况:

 //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()来获取方法中的值,但是如果可能的话我想传递该值。

2 个答案:

答案 0 :(得分: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 :(得分:4)

使参数成为一个函数。

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

然后在validate方法中调用函数,如

var high = params[0]();