1

.ajax()ページを更新せずにフォームを送信するために、jQueryのメソッドを使用して送信される連絡先フォームがあります。IE を除くすべてのブラウザーで動作します。

これは私のコードです:

function appointmentform() {    
    $("#appointment-form").on("submit", function(e) {

        // serialize all input data
        var dataString = $(this).serialize();
        console.log(dataString);

        // if there are no inputs with errors
        if ($("input.required.error").length < 1) {

            // ajax call to mail.php script
            $.ajax({
                type: "POST",
                url: "http://www.thesalonleamingtonspa.com/mail",
                data: dataString,
                success: function() {
                    // success notice
                }
            });

        }

        // cancel form submit
        if (e.preventDefault) { 
            e.preventDefault(); 
        } else { 
            e.returnValue = false; 
        }
    });
}

それはIEにとって何の意味もないことを理解していますが、同等e.preventDefault()だと思いました。e.returnValue = falseなぜそれが私にとってうまくいかないのか誰にも分かりますか?

編集:問題の子はIE8だけです。

4

4 に答える 4

4

本当の犯人は IE8 &console.log

IE8 はすぐに使える書き込みをサポートしていないため、スクリプトは関数が検出consoleされるとすぐに実行を停止します。console私のコードでpreventDefaultは、その部分の後に来たconsoleので、実行されませんでした。

解決策: IE8 で開発者ツールを開いたままにしておくと、次のように書き込むことができます。console

他の回答は役に立ちましたが、100% 正しいものはなかったので、私は自分の質問に回答しています。将来、私の質問を見る人は誰でも、私が今概説した本当の理由を聞くことで利益を得るかもしれません.

于 2012-05-25T17:42:33.517 に答える
1

e.preventDefault()はIEにとって何の意味もないことを理解しています

これは、jQueryを使用していない場合にのみ当てはまります。jQueryはこのクロスブラウザを作成します。

推測:jQuery <1.4を使用していますか?

JavaScript送信イベントはInternetExplorerでバブルしません。ただし、送信イベントでのイベント委任に依存するスクリプトは、イベントの動作を正規化したjQuery 1.4以降、ブラウザー間で一貫して機能します。

--http ://api.jquery.com/submit/

于 2012-05-25T16:50:38.050 に答える
1

戻るにfalseは、フォームの送信をキャンセルする必要があります

それ以外の

    if (e.preventDefault) { 
        e.preventDefault(); 
    } else { 
        e.returnValue = false; 
    }

使用する

return false;
于 2012-05-25T15:51:44.833 に答える
1

これはどうですか: 送信を使用する代わりに、ボタンを使用してください:

// use this ~ buttons don't do anything unless explicitly told to
<input type="button">

// not this ~ the default behavior is to submit ~ which you don't want
<input type="submit">

ボタンのクリックをリッスンしてから、関数を起動するだけです。

私は何年も送信ボタンを使用していません...文字通り...この問題を回避するためだけに。

私が通常「送信」イベントをリッスンする方法は、クリック時です。私の経験では、IE でもクリック イベントを処理できます。

function doAjaxStuff {
    // do form validation
    // do ajax stuff
}
myButton.click(doAjaxStuff);
于 2012-05-25T16:28:43.917 に答える