2012-11-12 14 views
22

に基づくのは、私は次のようにjQueryの検証にカスタムAddMethodを持っているとしましょう:私は疑問に要素変数を取得する方法を把握することはできませんダイナミックjQueryの検証エラーメッセージの要素

$.validator.addMethod('min-length', function (val, element) { 
    // do stuff 

// the error message here needs to be dynamic 
}, 'The field cannot be less than than ' 
    + element.attr('data-min') + // it is within the closure, but it can't grab it 
    ' length.'); 

それから任意の値を取得します。私はここで何が欠けていますか?

+2

[ドキュメントよりaddMethodは3番目の(つまり、3番目の)関数をとることができます。 'message')paramです。関数を渡すと何が起こるのかを見て、 'console.log(this)'の中に関数を入れてください。興味がある要素が「this」である可能性があります。あるいは、あなたが持っている他の関数と同じように、要素がパラメータとして渡される可能性があります。 – meetamit

答えて

55

バリのソースコードを見てから、私は、これはそれを行うべきだと思う:あなたの元のコードで

$.validator.addMethod('min-length', function (val, element) { 
    return this.optional(element) || val.length >= $(element).data('min'); 
}, function(params, element) { 
    return 'The field cannot be less than than ' + $(element).data('min') + ' length.' 
}); 

、メッセージ文字列は、クロージャ内にありません。クロージャがaddMethodの2番目の引数である場合、エラーメッセージは3番目の引数です。

+0

ありがとうございましたBarmar!あなたはそれを行うことができるという考えを持っていなかった:)また、それは閉鎖ではない、私の間違いです。 –

+8

私が探していたもの。また、検証機能の中にカスタムエラーメッセージを作成し、それを要素のデータに隠すこともできます。例えば$(element).data( 'error'、 '... custom message ...') 'return $(element).data( 'error')' – patricksurry

+1

を介してメッセージ関数でそれを回復します。もう1つの追加点は、他の場所にメッセージが定義されている場合、ルールセット上で、例えば 'addMethod 'は無視されます。バリデータが最初にパラメータを使用し、 'null'または空の文字列が返された場合はデフォルトを使用すると考えました。 – ps2goat

3

まず、私はバーマーの答えに感謝します。

jarery検証メッセージのいずれかをparam値とともに使用することができます。単純にメッセージインスタンスを呼び出すことができます。ここで

は、コードjqueryの検証で

  jQuery.validator.addMethod("custom_min", function(value, element, param) { 
       value = replaceAll(value, ',' , ''); 
       return this.optional(element) || value >= param; 
      },jQuery.validator.messages.min); 

jQuery('#form_id').validate({ 
    rules: { 
    'field_name': { 
     required: true, 
     number: true, 
     custom_min: 1000 
    } 
}); 

は、あなたがそれはあなたのエラーメッセージがスローされます1000よりも何かを入力するのであれば、「1000より大きい値を入力してくださいあります(あなたのバリデーションに現在のメソッドの変更が必要な場合や、複数の言語で開発している場合は、このメソッドが高速になります。

+1

私はそれが提示された例を解決するのであなたの答えをupvoted Barmarの答えはもっと一般的な解決法を提供します。これは私がこのページに着いたときに探していたものでした。 – cosan

1

これは偶然によって見つけられました。私のメッセージは結果によって非常に動的です。 validateを呼び出す前に、属性data-msg = "私のカスタムメッセージ"を要素に追加します。バリデータはそれをピックアップします:

err_msg = 'My custom message'; 
$('#my_element_id').attr('data-msg', err_msg); 
$('#my_form_id').validate().element('input[name=\'my_element_name\''); 

はjquery.validate.jsここにパーティーに遅れて

0

でcustomDataMessage下にいくつかのコード参照を見つけましたが、これは私のために働くようだ:

jQuery.validator.addMethod("minDate", function(value, element, param) { 
    var inputDate = new Date(value); 
    return (inputDate >= param) 
    }, function(param, element) { 
     return 'Enter a date greater than or equal to ' + $.datepicker.formatDate("M d, yy", new Date(param)); 
}); 

ここで、minDateの値は、このようなものを検証するためにコントロールに設定されています。

$('form:first').validate({ 
    rules: { 
     "date-filed": { 
      minDate: new Date(2000,0,0) 
     }, 
... 
関連する問題