6

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"
            }
        });
    }
});
4

1 に答える 1

5

わかりました、これはちょっと変なので、我慢してください。

input名前/IDがあるという事実がsubmit問題を引き起こしています。これは、内部で jQuery validate が を呼び出しているためだと思いますform.submit。あなたの場合、form.submitフォーム要素であるため、これは何もしません。

submitボタンの名前を変更すると、すべて正常に動作します。

例: http://jsfiddle.net/42TK4/7/

于 2013-03-12T22:06:34.593 に答える