1

「false を返す」理由 または「event.preDefualt();」$.post(); の後は機能しません。まず、単純に return false の後 に書きました。しかし、$(#id).submit(function(e){ return false;}// it works properly何かを経由$.post('check-email.php',{parameter},function{data})して呼び出し、その $.post 呼び出しの後に return false を書き込もうとすると、動作せず、次のページに直接移動します。ここに私のコードがあります:-

$(document).ready(function () { //newly added 
    $('#mysignupform').submit(function (event) {
        return false;
        or event.preDfault(); // only work here
        var emailVal = $('#inputEmail').val(); // assuming this is a input text field
        //alert(emailVal);
        $.post('check-email.php', {
            'email': emailVal
        }, function (data) {
            alert(data);
            if (data == 'false') {
                $("#mysignupform").submit(function (event) {
                    return false;
                    or event.preventDefault(); //both doesnt work here..why??
                    ;
                });
            } else {
                $("#mysingupform").submit(function () {
                    return false;
                }); //retrun false doesnt work here..why??
            }
        });
    });
});

私は彼らが提出することを許可したくありませんが、それでも起こっています。私を助けてください..!前もって感謝します..

4

5 に答える 5

1

Ajax は非同期で動作します。簡単な解決策は、送信ボタンにクリック イベント ハンドラーをバインドすることです。

$('#your_submit_button').click(function (event) {
    event.preventDefault();
    var emailVal = $('#inputEmail').val(); // assuming this is a input text field
    $.post('check-email.php', {
        'email': emailVal
    }, function (data) {
        if (data !== 'false') {
            // submit the form here
            $("#mysingupform").submit();
        }
    });
});
于 2012-10-23T09:02:40.477 に答える
1

非同期だから$.postです。実行は、 immediatelyの呼び出しに続くステートメントから続行されます。その後にステートメントがないため、イベント ハンドラー関数は単純に戻り、ブラウザーは何も起こらなかったかのように喜んで送信を続行します。$.postsubmitundefined

非同期メソッドへのコールバックは、しばらくしてから実行されます。あなたの場合、それはサーバーが応答を返すときです。外側の関数は既に戻っているため、そのコールバック関数が に戻る場所はありませ

フォーム送信ボタンのイベント ハンドラーで既定のアクションを常に防止し、コールバックclickで成功したときにプログラムでフォームを再送信する必要があります。$.post

$('#mysignupform :submit').click(function (event) {
    var form = this.closest("form"); // Get a reference to the containing form
    event.preventDefault(); // Prevent the default action (form submission)
    $.post('check-email.php', { /* data */ }, function (data) {
        // If the data is good...
        form.submit(); // Submit the containing form
    });
});

submitフォームイベントにバインドしている場合、フォームの再送信によってイベント ハンドラーが再びトリガーされ、無限ループに陥ってしまうため、明らかにこれを行うことはできません。

于 2012-10-23T08:59:58.610 に答える
1

これはうまくいくはずです:

$(document).ready(function () { //newly added 
    $('#mysignupform').submit(function (event) {
        // your $.post call
        $.post('check-email.php', {email: emailVal}, function (data) {
            // ...
            // having a return false means returning false to the success callback
            // of your .post call. it is not the same as returning false to the 
            // submit() callback
        });

        // return false to submit()
        return false;
    });
});
于 2012-10-23T09:00:13.253 に答える
0

これは、投稿が完了した後に実行される関数が非同期で実行されるためです。つまり、イベント ハンドラーにいる必要はありません。

この回答には、使用できる手法があります。基本的に、投稿ロジックが2回実行されないようにブール値フラグを設定した後、送信ボタンをもう一度クリックします。

于 2012-10-23T09:02:12.630 に答える
0

$.post(...)非同期です。$.ajax(async: false, ...)代わりに試してください。

于 2012-10-23T09:00:14.220 に答える