web-dev-qa-db-ja.com

FirefoxでjQuery event.preventDefault()が機能しない(JSFiddleを含む)

これは他のいくつかと同じような複製ですが、この場合event.preventDefault()を正しく使用していると思います。

コードを表示できるJSFiddleは次のとおりです。 http://jsfiddle.net/SeEw2/2/

基本的に、[送信]ボタンをクリックします。

Chromeの場合:何も起こらない-正しい応答。

Firefoxの場合:ページがリロードされます。

では、ChromeではなくFirefoxでページがリロードされるのはなぜですか?私はそれをFirebuggingしており、どちらにもエラーは発生しません...

49
Jack

コード内の変数eventは初期化されていません。

http://jsfiddle.net/SeEw2/4/

抽出:

 $('#ajaxsearch').click(function(event) {

        // Stop the Search input reloading the page by preventing its default action
        event.preventDefault();
98
Shikiryu

あ、過去にも同じような問題があった。 event.preventDefault()ではなく、イベントを次の場所に渡してみてください。

    function ie8SafePreventEvent(e){
    if(e.preventDefault){ e.preventDefault()}
    else{e.stop()};

    e.returnValue = false;
    e.stopPropagation();        
}

IEと表示されていることは知っていますが、=]以来問題が発生したことはありません。

9
Dartoxian

私のコードは少し違うため、この方法で解決しました。これは他の人に役立つかもしれません。私の初期コードはこのように見えました。

<form id="enrollstudentform" onsubmit="return enrollStudents()">
    ...
</form>

私のjs関数は次のように見えました

function enrollStudents() {
    // Stop Form.
    event.preventDefault();
    // Other code
}

関数呼び出しでパラメーターイベントを渡し、functionで受け取る必要がありました。

<form id="enrollstudentform" onsubmit="return enrollStudents(event)">
    ...
</form>

jsコード:

function enrollStudents(event) {
    // Stop Form.
    event.preventDefault();
    // Other code
}

役に立てば幸いです。

1
Andres Ramos

function(event)のようなイベントオブジェクトを渡さないからですが、私の質問は、type="button"とonclickは値を渡しますか?本質的に、あなたはこのプロセス全体で何をしているのか。

1
Babiker

送信ボタンのクリックイベントを探す代わりに、 $(form).submit ハンドラーを使用してみませんか?

ハンドラーの最後に「falseを返す」限り、ページはリロードされません。

1
CamelBlues