206

以下は、私の JavaScript (mootools) コードです。

$('orderNowForm').addEvent('submit', function (event) {
    event.preventDefault();
    allFilled = false;
    $$(".required").each(function (inp) {
        if (inp.getValue() != '') {
            allFilled = true;
        }
    });

    if (!allFilled) {
        $$(".errormsg").setStyle('display', '');
        return;
    } else {
        $$('.defaultText').each(function (input) {
            if (input.getValue() == input.getAttribute('title')) {
                input.setAttribute('value', '');
            }
        });
    }

    this.send({
        onSuccess: function () {
            $('page_1_table').setStyle('display', 'none');
            $('page_2_table').setStyle('display', 'none');
            $('page_3_table').setStyle('display', '');
        }
    });
});

IE を除くすべてのブラウザで、これは正常に機能します。しかし、IE では、これによりエラーが発生します。私はIE8を持っているので、JavaScriptデバッガーを使用しているときに、eventオブジェクトにエラーの原因となっているメソッドがないことがわかりpreventDefault、フォームが送信されています。このメソッドは Firefox の場合にサポートされています (Firebug を使用して見つけました)。

ヘルプはありますか?

4

11 に答える 11

480

IEでは、使用できます

event.returnValue = false;

同じ結果を達成するために。

エラーが発生しないようにするために、preventDefault の存在をテストできます。

if(event.preventDefault) event.preventDefault();

この 2 つを次のように組み合わせることができます。

event.preventDefault ? event.preventDefault() : (event.returnValue = false);
于 2009-06-16T10:10:20.707 に答える
23

mootools の addEvent 関数を介してイベントをバインドすると、イベント ハンドラーはパラメーターとして渡された固定 (拡張) イベントを取得します。これには常に preventDefault() メソッドが含まれます。

このフィドルを試して、イベント バインディングの違いを確認してください。 http://jsfiddle.net/pFqrY/8/

// preventDefault always works
$("mootoolsbutton").addEvent('click', function(event) {
 alert(typeof(event.preventDefault));
});

// preventDefault missing in IE
<button
  id="htmlbutton"
  onclick="alert(typeof(event.preventDefault));">
  button</button>

すべてのjQueryユーザーは、必要に応じてイベントを修正できます。HTML onclick=".." を使用し、preventDefault() がない IE 固有のイベントを取得したとします。このコードを使用して取得してください。

e = $.event.fix(e);

その後 e.preventDefault(); 正常に動作します。

于 2012-11-21T14:29:52.503 に答える
6

Mootools は Event オブジェクトの preventDefault を再定義します。したがって、コードはすべてのブラウザで正常に動作するはずです。そうでない場合は、mootools の ie8 サポートに問題があります。

コードを ie6 や ie7 でテストしましたか?

ドクター曰く

addEvent で追加されたすべてのイベントは、mootools メソッドを自動的に取得します。手動でインスタンス化する必要はありません。

しかし、そうでない場合は、試してみることをお勧めします

new Event(event).preventDefault();
于 2009-06-16T10:26:16.090 に答える
4

IE9 以降のキーボード キーを無効にするには、次を使用します。e.preventDefault();

IE7/8 で通常のキーボード キーを無効にするには、:e.returnValue = false;またはreturn false;

キーボード ショートカットを (Ctrl などで)無効にしようとする場合は、Ctrl+F次の行を追加する必要があります。

try {
    e.keyCode = 0;
}catch (e) {}

IE7/8 のみの完全な例を次に示します。

document.attachEvent("onkeydown", function () {
    var e = window.event;

    //Ctrl+F or F3
    if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
        //Prevent for Ctrl+...
        try {
            e.keyCode = 0;
        }catch (e) {}

        //prevent default (could also use e.returnValue = false;)
        return false;
    }
});

参考:IE7/IE8でキーボードショートカットを無効にする方法

于 2013-11-14T15:27:19.907 に答える
3

これは、jquery 1.3.2 と 2009 年 9 月 18 日のナイトリー ビルドでテストした関数です。それと結果を教えてください。OSX 上の Safari、FF、Opera では、この目的のためにすべてが正常に実行されます。問題のある IE8 のバグを修正することのみを目的としており、意図しない結果が生じる可能性があります。

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

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

使用法:

$('a').click(function (e) {
    // Execute code here
    ie8SafePreventEvent(e);
    return false;
})
于 2009-09-18T05:29:01.527 に答える
0

return falseリスナーのすべてのブラウザで動作するはずです。

$('orderNowForm').addEvent('submit', function () {
    // your code
    return false;
}
于 2014-12-05T10:37:11.590 に答える
0

FWIW、誰かが後でこの質問に戻った場合に備えて、 onKeyPress ハンドラー関数に何を渡しているかを確認することもできます。

onKeyPress(event) の代わりに onKeyPress(this) を誤って渡したときに、このエラーが発生しました。

他に確認することがあります。

于 2015-06-22T22:51:11.990 に答える