6

addEventListener()Javascript で要素のプロパティに書き込むだけでなく、使用するコードを更新しようとしています。

これを行う前に、いくつかのことを確認したいと思いました。

  1. DOM を更新して要素を ( write で)removeEventListener()削除する場合、を呼び出す必要はないと想定しています。.innerHTML

  2. addEventListener一般的な最新のブラウザー (IE9、Chrome、Firefox、Safari) でサポートされています

  3. 最新のブラウザーで発生する可能性のあるその他の問題はありません。

コードを更新する際に銃を飛ばしたくないので、私は尋ねています。

ノート:

プロパティとイベントの相関関係 ( on を削除)。

  • onkeypress - キープレス
  • onblur -> ぼかし
  • オンフォーカス -> フォーカス

リサーチ

https://developer.mozilla.org/en/DOM/element.addEventListener (互換性チャートあり)

http://www.quirksmode.org/js/events_advanced.html

関連している

JavaScriptリスナー、「キープレス」はバックスペースを検出しませんか?

ノート

  • false を返す代わりに。preventDefault()入力時にフォームが送信されないようにするために使用します。
4

2 に答える 2

4

1) そのために removeEventListener を呼び出す必要はありませんが、addEventListener を介して eventListener にアタッチされた DOM 要素を削除する場合は removeEventListener を呼び出す必要があります。その子のいずれかを削除する場合は、何も削除する必要はありません。

2) addEventListener はすべての主要なブラウザーでサポートされています。

3) addEventListener に関連する最新のブラウザーには、その他の問題はありません。

4) onkeypress はイベントの名前ではなく属性であり、イベント名は keypress です。他の名前も同様*

クロスブラウザーの互換性のために jQuery を回避するための簡単なコード:

Element.prototype.on = function(evt, fn) {
if (this.addEventListener)
    this.addEventListener(evt, fn, false);
else if (this.attachEvent)
    this.attachEvent('on' + evt, fn);
};

Element.prototype.off = function(evt, fn) {
    if (this.removeEventListener)
        this.removeEventListener(evt, fn, false);
    else if (this.detachEvent)
        this.detachEvent('on' + evt, fn);
};
于 2012-05-17T15:52:02.917 に答える
3
  1. あなたはする必要はありません。DOM要素への参照を保存しない場合(たとえば、偶発的なグローバル変数など)、ガベージコレクターはそれをクリーンアップする必要があります。

  2. それがブラウザのサポートです。古いIEの場合、ほぼattachEvent()同じことを行うものがあります。

  3. 心配する必要はありません。これが現代的な方法です。

注:クロスブラウザーを作成するには、 jQueryを使用することをお勧めします。addEventListener内部的には、可能であれば使用しattachEvent、古いIEにフォールバックでき、イベントオブジェクトを正規化することもできるため、違いを心配する必要はありません。また、DOMの操作やトラバーサルにも最適です。

于 2012-05-17T15:55:06.500 に答える