2012-02-23 11 views
1

IE6 +で動作するコードが必要です。すべてのブラウザのサポートを逃したことはありません。デフォルトアクションを防止しますが、イベントを停止しないでください。

このコードは機能し、IE7、FF10、Google Chrome 17でテストしましたが、テストする他のブラウザはありません。私は私が私のコードで任意のブラウザのサポートを見逃している、誰がこれを行っているかどうかを知ると、コードが何であるかを知りたい:

if (!e) e = window.event; 

    e.returnValue = false; 

    if (e.preventDefault) e.preventDefault(); 

    return false; 
+0

何方法あなたは、イベントハンドラをバインドするために使用していますか?私はあなたがそのメソッドの中でイベントオブジェクトを正規化したいので、そしてイベントハンドラ自体の内部ではない*を*求めています。正規化したら、イベントハンドラ内から 'e.preventDefault();'を実行してください。 –

+0

IE6はメソッドを実装していないので、e.preventDefault()はうまくいきません。 – Cheetah

+0

そのため、イベントオブジェクトを正規化する必要があります。ケイパビリティスニッフィングの場合は+1。 –

答えて

3

preventDefault()は、W3C DOMレベル2の標準であるので、実施されるべきです現代のすべてのブラウザで。

IE6は最新のブラウザではなく、DOMレベル2またはpreventDefault()を実装していません。代替IE6は、設定したとおりにevent.returnValuefalseという設定を使用します。これはイベントのバブリングには影響しないことに注意してください(IE6ではevent.cancelBubbleをtrueに設定することによって達成されます)。だからあなたのコードは、伝播を止めることなくデフォルトのアクションを防ぐために、すべての最新のブラウザと同様、IE6でも動作するはずです。

しかし、あなたが持っていない場合、私はイベント上の任意のプロパティを設定しないようにコードを再構築したい:

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

+1 – harpo

関連する問題