2009-08-11 66 views
8

我想寫一個「少於」驗證器的jQuery。我想比較一個文本框與另一個,所以如果我有:jQuery驗證小於

<input type="text" id="value1" /> <input type="text" id="value2" /> 

我希望我的驗證的樣子

$('#myForm').validate({rules: { value1: { lessThan: "#value2" } } }); 

我已經試過,但我不能得到它的工作:

$.validator.addMethod('lessThan', function(value, element, param) { 
    var i = parseInt(value); 
    var j = parseInt($(param).val()); 
    return i >= j; 
}, "Less Than"); 

另一個問題是我應該在哪裏放置該代碼?在$(document).ready中還是僅僅在標籤中?

回答

11

我是個白癡。我在我的實際代碼中犯了一些錯字,並且弄亂了我在很多驗證器方法中看到的this.optional(element)。這裏是工作職能:

$.validator.addMethod('lessThanEqual', function(value, element, param) { 
    if (this.optional(element)) return true; 
    var i = parseInt(value); 
    var j = parseInt($(param).val()); 
    return i <= j; 
}, "The value {0} must be less than {1}"); 

這裏是濃縮版

$.validator.addMethod('lessThanEqual', function(value, element, param) { 
    return this.optional(element) || parseInt(value) <= parseInt($(param).val()); 
}, "The value {0} must be less than {1}"); 

現在我需要弄清楚如何重新運行驗證現場1當我改變域2。

0

我認爲你可以做到這一點,而不用實際編寫自己的驗證器方法。

$('#myForm').validate({ 
    rules: { 
     value1: { 
      maxlength: $('#value2').val().length 
     } 
    } 
}); 

$('#value2').change(function() { 
    $('#value1').rules('remove', 'maxlength').rules('add', { 
     maxlength: $('#value2').val().length 
    }); 
}); 

,甚至更好,而不重複代碼

function getRule() { 
    return { 
     maxlength: $('#value2').val().length 
    }; 
} 

$('#myForm').validate({ 
    rules: { 
     value1: getRule() 
    } 
}); 

$('#value2').change(function() { 
    $('#value1').rules('remove', 'maxlength').rules('add', getRule()); 
}); 
+0

謝謝。這確實奏效,但我設法讓我的驗證器方法工作。儘管你是那個激勵我的人。 – 2009-08-11 15:52:58

+5

-1 OP說的是數字,你講的是長度0_o – bluish 2011-07-29 12:30:56

1

您可以將任何文件準備塊中插入您的驗證方法,如下面所示。

$().ready(function() { 

    $.validator.addMethod("lessThan", 
     function(value, element, param) { 
      var i = parseFloat(value); 
      var j = parseFloat(param); 
      return (i < j) ? true : false; 
     } 
    ); 

}); 

我試圖保持這個簡單,以便您可以修改它。如果該方法被稱爲「lessThan」,那麼它應該這樣做。如果您的方法實際執行「小於或等於」,請考慮更合適的名稱。

請注意,我也使用parseFloat,允許該方法比parseInt更靈活。

從您的驗證器中,您正確使用它;所以對於驗證說,少於10:

$('#myForm').validate({ rules: { value1: { lessThan: "10"}} }); 

祝你好運!

+1

你爲什麼要用這樣的三元運算符?你的返回語句相當於'return(i 2010-06-28 14:49:30