ルート(問題)は、プラグインにすでに独自の関数が含まれている場合に、独立したsubmit
ハンドラー関数を追加していることです。 編集: 根本的な問題は、を押すまでプラグインが初期化されないことです。validate()
submitHandler:
validate()
submit
validate()
内で初期化しdocument.ready
、validate()
プラグイン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(検証は無視されます)