-1

だからここに私の問題の実用的なデモがあります: bin。コンテンツを表示するには、まずボタンをクリックします。次に、2 番目のタブであるパスワードに移動します。ここに問題があります。検証プラグインの EqualTo 呼び出しが正しく返されません。New Passwordとが正しい場合でもVerify Password、equalTo は false を返します。理由がわかりません。誰かがそれを理解できることを望んでいました。

注:
* クリック コールバック内にある if ステートメント内にプラグインの初期化を配置しました。これは、位置を台無しにする hide イベントと関係があります。だから私は単にそれをコールバックの中に入れて、一度だけ初期化するようにしました。

4

2 に答える 2

0

あなたが抱えている問題は、codaSliderとjQueryValidateの間の相互作用です。codaSliderスクリプトとコードを取り出すと、検証スクリプトが機能します(equalToをに変更した場合equalTo: '#new_password')。

codaSliderなしで動作するように編集されたビンは次のとおりです:http: //jsbin.com/welcome/37927/edit

編集:私はcodaSliderのソースコードを調べましたが、イベント処理のどこかで、スライダー要素内で発生するクリックをうまく処理できません。jQueryValidateが送信クリックを処理する方法をオーバーライドしていると思います。codaSliderにオプションcontinuous:falseを追加すると、使用しているcodaSliderを壊すことなく、この相互作用が修正されると思います。動作中のバージョンは次のとおりです:http://jsbin.com/welcome/37989/edit

于 2012-10-22T15:26:22.413 に答える
0

ルート(問題)は、プラグインにすでに独自の関数が含まれている場合に、独立したsubmitハンドラー関数を追加していることです。 編集: 根本的な問題は、を押すまでプラグインが初期化されないことです。validate()submitHandler:validate()submit

validate()内で初期化しdocument.readyvalidate()プラグインsubmitに意図したとおりにイベントを処理させます...

$("#change_Pass").validate({
    onkeyup: false,
    errorClass: "password_messages",
    debug: true, // remove this for production code
    rules: {
        change_password: {
            required: true
        },
        new_password: {
            required: true,
            passw: true
        },
        verify_password: {
            required: true,
            equalTo: ".coda-slider-wrapper .coda-nav .current #new_password"
        }
    },
    messages: {
        change_password: {
            required: "Please enter your current password"
        },
        new_password: {
            required: "Please enter a new password"
        },
        verify_password: {
            required: "Please verify your new password",
            equalTo: "Your passwords did not match"
        }
    },
    submitHandler: function(form) {
        alert($('#new_password').val());
        if ($(form).valid()) {
            alert("Success");
        }
        return false;
    }
});

無関係なコードが削除されたjsFiddleデモ:

http://jsfiddle.net/9SYr5/3/


編集:

さらに、validate()プラグインは、送信ボタンがクリックされるたびにではなく、ページが読み込まれたときに一度初期化する必要があります。

プラグインを不適切に初期化することは、非常に人気のあることのようです。この不適切な慣行によって引き起こされるすべてのさまざまな問題については、これらのSOリンクを参照してください。これらのSOの質問にはすべて、共通点が1つあります。それは、またはハンドラーvalidate()内に配置することによって不適切に初期化されます。submit()click()

1) https://stackoverflow.com/a/9936025/594235 (複数の送信クリックが必要)

で囲んだので、送信を押すまで検証関数はロードされません.validate().submit()送信を押したときにまだロードされていないため、検証は行われません。次に、2回目の送信を押すと、関数が読み込まれ、正常に機能しているように見えます。

で囲むと、DOMのロードが完了.validate()するdocument.readyと、検証プラグインがすぐにロードされます。したがって、フォームを操作する準備が整い、最初の送信時に正しく動作するのを待っています。

もっと...

2) https://stackoverflow.com/a/11068130/594235(クリックハンドラー内では検証されません)

3) https://stackoverflow.com/a/10825498/594235(2回目の送信では機能しません)

4) https://stackoverflow.com/a/10609871/594235(検証は2回実行されません)

5) https://stackoverflow.com/a/10987058/594235(送信時に新しいフォームを初期化しても機能しません)

6) https://stackoverflow.com/a/9460920/594235(検証は無視されます)

于 2012-10-22T19:26:16.643 に答える