2016-04-26 10 views
-1
var listenjustonce function(callback){ 
window.top.removeEventListener("mousemove",listenjustonce);} 

window.top.attachEvent("mousemove", listenjustonce); //or OnMouseMove?:D 
window.top.mousemove = listenjustonce; 
window.top.addEventListener("mousemove",listenjustonce); 

3つのうちのどれを保持する必要がありますか削除する必要がありますか? http://caniuse.com/#search=addEventListenerattachEvent対addEventListener対none

実際、すべての異なるイベント名のバリアントがあるブックマークを作成した人は誰ですか?

+0

下部に1つ、上部に1つ。 'remove/addEventListener'はすべての主要なブラウザで使用でき、他のすべてのイベント処理方法よりも単純なJavaScriptでの使用が推奨されています。 – zer00ne

+0

何をしようとしていますか? –

+1

また、[MDNのイベントタイプのリスト](https://developer.mozilla.org/en-US/docs/Web/Events)。 –

答えて

1

すべての3つはちょっと、みかん、同じことそれらの

を行い、この方法は、多くの場合、DOM0法と呼ばれ、それが実際の規格に先行されています

window.top.mousemove = listenjustonce。

このメソッドは動作しますが、いくつかの主要な欠点があります。

  • することはできません簡単にスタックそれら - 複数のリスナーが
  • あなたがスタックから単一のリスナーを削除することはできません持っています。
  • 古いブラウザのガベージコレクションのバグ。

attachEventはマイクロソフトの方法でした。私はこれもどの標準よりも前にあると信じています。何年もの間、IEにイベントを添付するのが最良の方法でしたが、現代の開発ではもはや必要ありません。

addEventListenerは、イベントを添付する最も良い方法であり、現在完全にサポートされています。現代のプログラミングでは常にこれを使うべきです。

attachEventが一般的に使用されていた場合は、attachEventaddEventListenerのいずれかを選択するためにラッパーを使用するのが普通でした。これらのラッパーの中には、attachEventで失われることがあるthisの値を正しく保存することさえできます。

+0

「attachEvent」はIE以外には存在しないので、メソッドが存在するかどうかを確認する必要があります。 – JCOC611

+0

私は別の理由を 'on *'に追加しました。特に古いIEではJSとDOMのガベージコレクションが互いに認識されず、メモリリークは簡単です。 IE8は公式にはEOLなので、パッチのない古いブラウザを扱っているのでなければ、 'addEventListener'を使ってください。 –

+0

ありがとう、@ AlexanderO'Mara - 私はそれについて忘れてしまった。 –

関連する問題