2012-02-14 6 views
0

私は体にイベントリスナーを追加するには、以下のコードを使用してオブジェクトに作られたイベントリスナーを削除しますが、私はあなたのthis.eventsオブジェクトにイベントハンドラを変更することにより、それをJavascriptが

this.events = { 
    addEventListener : function(element, eventName, eventHandler, scope) { 
     var scopedEventHandler = scope ? function(e) { eventHandler.apply(scope, [e]); } : eventHandler; 
     if(document.addEventListener) 
      element.addEventListener(eventName, scopedEventHandler, false); 
     else if(document.attachEvent) 
      element.attachEvent("on"+eventName, scopedEventHandler); 
    } 
} 
this.events.addEventListener(document.body, "keydown", this.keyEvent, this); 
+0

イベントを削除しようとしたときに書いたコードを投稿できますか? – Tinister

+0

if(document.addEventListener){//標準 document.body.removeEventListener( 'keydown'、this.keyEvent、false); } else {// IE document.body.detachEvent( 'onkeydown'、this.keyEvent); } – user1209203

+0

リムーバーリスナー機能を同じスタイルで作成しようとしましたが、違いはありません。 – user1209203

答えて

0

を削除することはできません、イベントハンドラもはや同じではありません。

http://jsfiddle.net/asXzA/1/

私はあなたが、あなたは簡単なものを引き出すことができ、そのように、あなたのthis.eventsシステムを介して追加イベントの登録を作成することをおすすめします。

this.events = { 
    eventRegistry : {}, 

    addEventListener : function(element, eventName, eventHandler, scope) { 
     var scopedEventHandler = scope ? function(e) { eventHandler.apply(scope, [e]); } : eventHandler; 

     // save the scoped event handler 
     if (typeof eventRegistry == "undefined")     
      eventRegistry = {}; 

     if (typeof eventRegistry[eventName] == "undefined") 
      eventRegistry[eventName] = {}; 

     eventRegistry[eventName][eventHandler] = scopedEventHandler; 

     if(document.addEventListener) 
      element.addEventListener(eventName, scopedEventHandler, false); 
     else if(document.attachEvent) 
      element.attachEvent("on"+eventName, scopedEventHandler); 
    }, 

    removeEventListener : function(element, eventName, eventHandler, scope) { 

     // retrieve saved event handler 
     var scopedEventHandler = eventRegistry[eventName][eventHandler]; 

     if(document.removeEventListener) 
      element.removeEventListener(eventName, scopedEventHandler, false); 
     else if(document.detachEvent) 
      element.detachEvent("on"+eventName, scopedEventHandler); 
    } 
}; 

this.keyEvent = function() { alert("keypressed"); this.events.removeEventListener(document.body, "keydown", this.keyEvent, this); alert("removed"); }; 
this.events.addEventListener(document.body, "keydown", this.keyEvent, this);​ 
+0

うまくいきましたが、何かの理由でキーが押されていて問題が解決していません新しいオブジェクトだけでなく、現在のものを参照して、それはSafariでは大丈夫ですが、Firefoxではありません。 – user1209203

+0

firefoxの問題は、私がオブジェクトのフォーカスを変更しても、フォーカスを維持しているすべてをオフに設定するリンクです。 – user1209203

+0

私のソリューションは、イベントハンドラを削除するのに役立ちませんか? 「焦点を絞って」、「新しいオブジェクトを作成する」という意味を理解していません。まだあなたが投稿したのと同じコードについて話していますか?どうも。 – caleb