2016-11-16 6 views
1

jQueryはプラグインが1つのフィールドで複数のメソッドを渡すことを検証できますか?例えばjQueryの1つのフィールドに複数のメソッドを追加する方法

、二つの方法を追加:私は1つの方法を追加すると

<form id="form" name="form">  
    <input type="text" name="something_from_html" id="something_from_html"> 
</form> 

:HTMLの一部を

$("#form").each(function(index, el) { 
    $(el).validate({ 
     rules: { 
      something_from_html: { 
       required: true, 
       method_one: true, 
       method_two: true 
      }, 
     }, 

    }); 
}); 

var num1 = 1; 
    num2 = 10; 
    range1 = 100; 
    range2 = 250; 
    value = $("#something_from_html") 

$.validator.addMethod("method_one", function(value, element) { 
    if(value < num1 || value > num2) 
     return false; 
    return method_one(value, num1, num2); 
}, I18N("wrong number")); 


$.validator.addMethod("method_two", function(value, element) { 
    if(value < range1 || value > range2) 
     return false; 
    return method_two(value, range1, range2); 
}, I18N("wrong range")); 

1つのフィールドに異なる警告メッセージを返しますがそれを支配するために、それは完全に働く。しかし、method_oneとmethod_twoの両方を追加すると、うまくいきません。誰もそれを修正する方法を知っていますか?

+0

IDセレクタに ')(各'呼び出すと少し冗長です。あなたのHTMLに 'form'というIDの要素が1つしかありません。 –

+0

@RoryMcCrossanはい!要素が1つしかありません。 –

+0

要素はこれを私に渡します。 –

答えて

1

問題は、追加の方法のロジックが原因です。入力値の有効性を示すブール値を返す必要があります。
現在、存在しない定義済みのバリデータメソッド名でグローバルメソッドを呼び出そうとします。

またnumrangeの値と比較できるように、入力に入力されたテキスト値を整数に変換するには、parseInt()を使用する必要があります。また、これらの変数はスコープの問題をセーブするためにバリデータメソッド内で宣言する必要があります。
これを試してください。

$.validator.addMethod("method_one", function(value, element) { 
    var num1 = 1, num2 = 10; 
    value = parseInt(value, 10); 
    return !(value < num1 || value > num2); 
}, I18N("wrong number")); 


$.validator.addMethod("method_two", function(value, element) { 
    var range1 = 100, range2 = 250; 
    value = parseInt(value, 10); 
    return !(value < range1 || value > range2); 
}, I18N("wrong range")); 

Working example

+0

ありがとう、それは動作します! :) –

関連する問題