2012-01-15 8 views
0

Javascriptでページに定義されているすべてのイベントハンドラをキャンセルしたいと思います。言い換えれば、以前にページが多くの異なるDOMレベルで多くのイベントリスナーを設定していた場合、このメソッドは単純にそれらのすべてを削除します。 Javascriptでこれを行う方法はありますか?イベントハンドラをすべてクリアする

答えて

2

動的ページの本文内の要素に接続されたすべてのイベントをクリアするために、あなたが行うことができます:

document.body.innerHTML = document.body.innerHTML; 

をwindowオブジェクトに添付イベントをクリアするために、あなたが行うことができます:

window.onscroll = function() {}; 
私のテスト `document.onmousedown`イベントをクリアしていなかった

など..

+0

。 – wecsam

+0

ドキュメントオブジェクトに添付されているイベントをクリアするためのショートカットはありません。ウィンドウオブジェクトと同様に、 'document.onmousedown = function(){}'のように1つずつクリアする必要があります。 – techfoobar

+1

これはうまくいくかどうかわかりません。 'innerHTML'自体にいくつかのイベントをいくつかの要素に追加した'

1

いや何にバインドされているかを確認するにはネイティブイベントリストはありません。より良いイベント管理が必要な場合、JQueryには独自の機能があります。

は、ここでは、jQueryの中で行うの方法は次のとおりです。

(function($) { 
    $.eventReport = function(selector, root) { 
     var s = []; 
     $(selector || '*', root).andSelf().each(function() { 
      var e = $.data(this, 'events'); 
      if(!e) return; 
      s.push(this.tagName); 
      if(this.id) s.push('#', this.id); 
      if(this.className) s.push('.', this.className); 
      for(var p in e) s.push('\n', p); 
      s.push('\n\n'); 
     }); 
     return s.join(''); 
    } 
    $.fn.eventReport = function(selector) { 
     return $.eventReport(selector, this); 
    } 
})(jQuery); 

あなたはそれがあなたのニーズに合わせてさまざまな方法を呼び出すことができます。そこから

// all events 
alert($.eventReport()); 

// just events on inputs 
alert($.eventReport('input')); 

// just events assigned to this element 
alert($.eventReport('#myelement')); 

// events assigned to inputs in this element 
alert($.eventReport('input', '#myelement')); 
alert($('#myelement').eventReport('input')); // same result 

// just events assigned to this element's children 
alert($('#myelement').eventReport()); 
alert($.eventReport('*', '#myelement'); // same result 

、バインド解除は簡単です。

関連する問題