40

jQueryにカスタムのAddMethodがあり、次のように検証するとします。

$.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.');

問題の要素変数を取得し、そこから値を取得する方法がわかりません。ここで何が欠けていますか?

4

6 に答える 6

86

バリデーターのソースコードを見ると、これでうまくいくと思います。

$.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.';
});

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

于 2012-11-12T22:57:25.173 に答える
6

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

考えれば、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検証で

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

したがって、1000未満の値を入力すると、「1000(検証に入力した量)より大きい値を入力してください」というエラーメッセージが表示されます。検証で現在のメソッドを変更する必要がある場合、またはあなたはそれを多言語で開発しています。

于 2015-02-15T18:41:26.250 に答える
2

Barmarの回答が機能しない場合は、要素の設定にすでにエラーメッセージが含まれていることが原因である可能性があります(たとえば、asp.net MVCのサーバーから設定されます)。

したがって、jQuery.validateコードは、2番目のパラメーターによって$.va​​lidator.addMethodに設定された新しいデフォルトを無視します。

それを回避する方法は、次のことを行うことです。

$.validator.addMethod('min-length', function (val, element) {
   this.settings.messages[element.name]['min-length'] = function () { return 'put your custom message here'; };

   return this.optional(element) || val.length >= $(element).data('min');
});
于 2018-06-05T12:18:11.633 に答える
1

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

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のcustomDataMessageの下にいくつかのコード参照が見つかりました

于 2016-02-12T18:18:31.140 に答える
0

ここでのパーティーに遅れましたが、これは私にとってはうまくいくようです:

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)
        },
...
于 2016-04-20T19:03:00.713 に答える
0

コード:

    $.validator.addMethod("strongePassword", function(value) {
        return /^[A-Za-z0-9\d=!\-@._*]*$/.test(value) && /[a-z]/.test(value) && /\d/.test(value) && /[A-Z]/.test(value);
    },"The password must contain at least 1 number, at least 1 lower case letter, and at least 1 upper case letter"); 
        

用途:

  rules: { 
        password: {
                    required: !0,
                    strongePassword: true
                 },
     }
于 2020-09-30T17:24:34.080 に答える