2016-08-31 2 views
0

の子オブジェクトにイベントリスナーを追加し、ウィンドウ上の子オブジェクト、どこでも(窓など)からのイベントを受け入れる1にイベントを追加することが可能ですか?は、ウィンドウ

したがって、たとえば:私は窓に添付されている他のKeyDownイベントを削除せずに、この特定のキーダウンイベントを削除することができ

window.myVariable.addEventListener('keydown', doKeyDown); 

この方法です。

このようなことはどうですか?

+0

この「myVariable」とは何ですか?誰がこの 'keydown'イベントを起こすのでしょうか? –

+0

「myVariable」は何でもかまいません。私は基本的に、私はループしてそれらを削除することができます特定のイベントのためのラッパーを作りたいと思います –

+0

これは、(onclick'のようなブラウザとは対照的に)これらのイベントを発生させるあなたのアプリになるでしょうか? –

答えて

1

あなたは、「名前空間」上で動作し、簡単なレジストリを作成することができます。その後

(function() { 
 

 
    var register = {}; 
 

 
    function addNamedListener(namespace, eventType, callback) { 
 
    register[namespace] = register[namespace] || []; 
 
    register[namespace].push({ 
 
     eventType: eventType, 
 
     callback: callback 
 
    }); 
 

 
    window.addEventListener(eventType, callback); 
 
    } 
 

 
    function removeNamedListener(namespace) { 
 
    register[namespace].forEach(function(event) { 
 
     window.removeEventListener(event.eventType, event.callback); 
 
    }); 
 
    } 
 

 
    window.WindowEvents = { 
 
    addNamedListener: addNamedListener, 
 
    removeNamedListener: removeNamedListener 
 
    } 
 

 
})(); 
 

 
// Attach a general window event to the actual window 
 
window.addEventListener('click', function(e) { 
 
    console.log(e.target); 
 
}); 
 

 
// Attach a namedspaced event 
 
WindowEvents.addNamedListener('windowClicks', 'click', function(e) { 
 
    console.log(e.target); 
 
}); 
 

 
// Attach another event to the same namespace 
 
WindowEvents.addNamedListener('windowClicks', 'click', function(e) { 
 
    console.log(e.clientX); 
 
}); 
 

 
// Attach a new event to a different namespace 
 
WindowEvents.addNamedListener('down', 'mousedown', function(e) { 
 
    console.log('Mouse down occurred'); 
 
});
<div>Click Me</div>

、あなたがその「名前空間」内のイベントを取り除くために準備ができているとき、あなたはこの操作を行います。

WindowEvents.removeNamedListener('windowClicks'); 

これは、元のウィンドウを残しますイベント、および作成された他の名前空間イベント(down)が含まれます。

これは少なくともあなたを始められるはずです。

+0

私は非常に似たようなことをしました。イベントの配列を持つイベントを管理する2つのクラスとイベント(配列に追加される)に関する情報を保持するクラスを作成しました。次に、配列に項目を追加してから、配列をループしてイベントを削除することができます。 –

0

実際には、ハンドラをbody要素などに割り当てることはできますが、

このようにして、この特定のキーダウンイベントを削除できます。ウィンドウにアタッチされている他のキーダウンイベントは削除されません。

しかし、これはX-Yの問題のようです。

removeEventListenerには、と入力してください。イベントリスナーを削除する必要があります。

removeEventListener('keydown', doKeyDown); 

...デフォルト動作は「他のキーダウンイベントを削除しない」です。

関連する問題