3

私はAjaxとJqueryを初めて使用し、ログインページで(ワードプレスを使用して)いくつかの検証を実行したいと考えています。

このコードを使用して、ログインフォームの送信をキャッチします...

$("#login").submit(function (e) {
    $.ajax({
        type: "post",
        dataType: 'json',
        url: ajax_login_object.ThemeFolder + "/log-in-script.php",
        data: {
            'user_login': user_login,
                'user_pass': user_pass,
                'action': 'login'
        },
        success: function (data) {
            if (data.succeeded == true) {
                // JUST WANT TO SUBMIT THE FORM HERE
                // tried return true.. no joy
                // tried $("#login").submit() but just ends up with neverending loop
                // tried document.href etc but lose the POST data
                // tried nesting another ajax call but no joy
                // ????
            }
        }
    });
    e.preventDefault();
});

私のlog-in-script.phpで、いくつかチェックします。たとえば、パスワード フィールドに入力していないのにユーザー名がデータベースにある場合は、パスワードをリセットします。パスワードフィールドに入力しておらず、ユーザー名がデータベースにない場合は、登録します。

彼らがユーザー名とパスワードを入力した場合、通常どおりフォームを送信したいだけですが、これを行う方法に苦労しています。本当に単純なものが欠けていると確信しています。

どんな助けでも本当に感謝しています。

ありがとう

ジョン;-)

4

1 に答える 1

8

試す

$("#login")[0].submit()

フォーム要素で直接呼び出しsubmit()、submit イベント コールバックの呼び出しを避ける

デモ: http://jsfiddle.net/5Xv5f/1/

アップデート:

これは、ほとんどのブラウザーとすべての Gecko ベースのアプリケーションに当てはまります。

https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.submit

フォームの onsubmit イベント ハンドラー (たとえば、onsubmit="return false;") は、Gecko ベースのアプリケーションからこのメソッドを呼び出したときにトリガーされません。一般に、HTML ユーザー エージェントによって呼び出されることは保証されていません。

しかし、これに対するW3標準の言葉はありません。

したがって、100%確実にしたい場合は、次のようにすることができます。

$("#login").submit(function (e) {

    // submit if already checked
    if($(this).attr("data-checked")) {
          return true;
    }

    $.ajax({
        type: "post",
        dataType: 'json',
        url: ajax_login_object.ThemeFolder + "/log-in-script.php",
        data: {
            'user_login': user_login,
                'user_pass': user_pass,
                'action': 'login'
        },
        success: function (data) {
            if (data.succeeded == true) {
                // JUST WANT TO SUBMIT THE FORM HERE

                // flag as checked
                $("#login").attr("data-checked","1");

                // submit
                $("#login").submit()            
            }
        }
    });
    e.preventDefault();
});

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

于 2013-09-13T13:20:32.360 に答える