1

jQuery Validator プラグインを使用していますが、これはうまく機能しています。パスワードに 1 つの数字または 1 つの特殊文字が含まれていることを確認する別のカスタム メソッドを追加しましたが、これもうまく機能します。問題は、その条件が失敗した場合 (6 文字のテキストを入力するだけ)、「パスワードには少なくとも 1 つの数字または特殊文字を含める必要があります」というエラー メッセージがスローされないことです。なぜこれになるのか誰にも分かりますか?コードは以下のとおりです。

jQuery.validator.addMethod("onespecial", function(value, element){
        var pattern = /^(?=.{6,})(?=.*[a-z])(?=.*[0-9])|(?=.*[!@#$%^&*()-+=]).*$/;

        return (pattern.test(value));

    }, "Your password must contain one number or special character");

    $("#activateForm").validate({
        rules: {
            first_name: "required",
            last_name: "required",
            password: {
                required: true,
                minlength: 6,
                onespecial: true
            },
            pass_confirm: {
                required: true,
                minlength: 6,
                equalTo: "#Password",
                onespecial: true
            },
            position: "required",
            category: "required"

        },
        messages: {
            first_name: "Please enter your first name",
            last_name: "Please enter your last name",
            password: "Please enter a valid password",
            pass_confirm: "Your passwords much match",
            position: "Please select your position",
            category: "Please select your category"
        }
    }); 

更新: マークアップあり

 <div id="activate-form">
<h1>Welcome. We just need a little bit more information.</h1>
  <form action="/" id="activateForm" method="post" novalidate="novalidate">     <div><input type="text" name="first_name" class="form-input" placeholder="First name" onfocus="this.placeholder=''" onblur="this.placeholder='First name'" id="FirstName"></div>        <div><input type="text" name="last_name" class="form-input" placeholder="Last name" onfocus="this.placeholder=''" onblur="this.placeholder='Last name'" id="LastName"></div>        <div><select name="category" class="form-input" id="Category"><option value="">Select category</option><option value="test">test</option><option value="test">test</option></select></div>
    <div><select name="position" class="form-input" id="Position"><option value="">Select Position</option><option value="RA">RA</option></select></div>
    <div><input type="password" name="password" class="form-input" placeholder="Password" onfocus="this.placeholder=''" onblur="this.placeholder='Password'" id="Password"></div>       <div><input type="password" name="pass_confirm" class="form-input" placeholder="Confirm password" onfocus="this.placeholder=''" onblur="this.placeholder='Confirm password'" id="PassConfirm"></div>        <div><input type="hidden" name="key" value="fff" id="Key"></div>          <input type="submit" value="Finish" class="button">     </form></div>
4

2 に答える 2

4

オプションのすべてのエラーメッセージをpasswordオーバーライドpass_confirmしているため、カスタムメソッドからメッセージを取得していませんmessages...

messages: {
    first_name: "Please enter your first name",
    last_name: "Please enter your last name",
    password: "Please enter a valid password",  // <-- overrides all messages
    pass_confirm: "Your passwords much match",  // <-- overrides all messages
    position: "Please select your position",
    category: "Please select your category"
}

ルールごとにメッセージを指定できます。カスタム メソッドにメッセージを指定しない場合は、その中で定義したメッセージaddMethodが使用されます。

messages: {
    first_name: "Please enter your first name",
    last_name: "Please enter your last name",
    password: {
        required: "Please enter a valid password",
        minlength: "Please enter a valid password"
        // onespecial: "" // <-- message already defined within addMethod()
    },
    pass_confirm: "Your passwords much match", 
    position: "Please select your position",
    category: "Please select your category"
}

また、注意pass_confirm:フィールドのすべてのルールを複製する必要はありません。なんといってもパスワード欄と必ず一致しなければならないので、その条件はすでに満たされています

password: {
    required: true,
    minlength: 6,
    onespecial: true
},
pass_confirm: {
    equalTo: "#Password",  
},

デモ: http://jsfiddle.net/WZPcW/

于 2013-10-15T20:06:36.570 に答える
0

コードを実行してテストできるように、JsFiddle バージョンを添付して再現してください。

私にとって、あなたはメッセージを上書きしており、次のようなことをすると:

messages: {
    password: 
    {
        required: "Please enter a valid password",
        minlength: "Please enter a valid password"
    }
}

メッセージを検証名に割り当て、カスタムメソッドを上書きしてはならないため、機能するはずです。しかし、私はちょうど推測しています。

編集:うわー、また答えが表示されませんでした:/Sparky はあなたのメサケについてすべて書きました。

于 2013-10-15T20:15:38.623 に答える