jQuery Validate プラグインを使用して、メールが別のユーザーによって取得されていないことを確認するために ajax リクエストを作成して、フォームのメール フィールドを検証しています。私は次のようなルールを追加することでそうします:
//make sure email field is on form before adding rule
if ($(".unique_email").is("*")) {
//remote validation
$(".unique_email").rules("add", {
remote: "http://test.nethop.com/test.cgi",
messages: {
remote: "This email is already in use"
}
});
}
ただし、フォームで「送信」を押すたびに、最初に ajax リクエストを実行してメールが取得されていないことを確認し、メールが正常であると検証されても送信されません。送信をもう一度押すと、送信されます。これがなぜなのか誰か知っていますか?
問題を示すjsfiddleをセットアップしました。chrome 開発者ツールまたは firebug を使用している場合、ajax リクエストが行われ、 が返されtrue
、まだ送信されていないことがわかります。
HTML
<form id="listing" method="post">
<ul>
<li>
<label for="username">Email *</label>
<input type="text" name="username" id="username" autocomplete="off"
class="email required unique_email" value="test@test.com" />
</li>
<li>
<input type="submit" name="submit" id="submit" class="btn" value="Save"
/>
</li>
</ul>
</form>
完全なスクリプト:
$(document).ready(function () {
var validator = $("form").validate({
onkeyup: false,
onblur: true,
});
if ($(".unique_email").is("*")) {
//remote validation
$(".unique_email").rules("add", {
remote: "http://test.nethop.com/test.cgi",
messages: {
remote: "This email is already in use"
}
});
}
});