2011-12-15 12 views
0

私はユーザーのキーイベントを使用してクロム拡張を作成しています。 しかし、要素がすでにキーボードイベントにバインドされている場合、ユーザーに警告する必要があります。キーボードイベントを検出する方法はすでにバインドされていますか?

キーイベントが既にバインドされているかどうかを検出するにはどうすればよいですか?

+0

あなたはすでにChromeデベロッパーツールでこの情報を入手できますか? – HoLyVieR

答えて

2

これは扱いにくいです。実際には、HTMLElementのイベントにバインドする方法はかなり異なります。問題は、この投稿へのコメントセクションに尋ねたとして、検出する本当の方法はありません、ある

var ele = document.getElementById("yourDiv"); 
if (ele.onkeydown) { 
    alert("onkeydown event is already bound"); 
} 
else { 
    ele.onkeydown = yourEventHandler; 
} 

:私はバインド(と何かがバインドされているかどうかを確認)する最も簡単な方法は、このようなものになるだろうと仮定しますイベントがバインドされる前にHTML要素のプロトタイプを変更できない場合は、addattributeListenerまたはattachEventによってprogramattic javascriptでイベントが追加されます。 (したがって、ページ上のすべてのスクリプトが実行された後に実行されるため、ユーザスクリプトはイベントがバインドされる前に実際にプロトタイプを変更することはできません)。しかし、それがあなた自身のページであり、あなたはこれらのイベントの変化を監視したいだけです。あなたはこのような何かを行うことによって、プロトタイプにそれをハックすることができます

// cache the original event handler 
HTMLAnchorElement.prototype.realAddEventListener = HTMLAnchorElement.prototype.addEventListener; 

// now override it so you can add in your custom functionality 
HTMLAnchorElement.prototype.addEventListener = function(a,b,c){ 
    this.realAddEventListener(a,b,c); 
    // do whatever you want to cache those listening functions, maybe shove them in an array 
    // for the current object 
    if (!this.listeners) { 
     this.listeners = new Array(); 
    } 
    this.listeners.push({a : a, b : b , c : c}); 
}; 

// code here that adds an event handler 
document.getElementById("txtField").addEventListener("keydown", function() { 
    console.log("key down pressed"); 
}); 

// find the event listeners that are bound 
var listeners = document.getElementById("pressed").listeners; 

見る、私はまた、この正確な問題をカバーし、ここでこの質問を見つけ、そこにいくつかの良い答えは、深さの多くすることで行く:How to find event listeners on a DOM node when debugging or from the JavaScript code?

+0

ありがとうございます。しかし、私が 'addEventListener'を使ってイベントをバインドすればどうでしょうか? これを検出する方法はありますか? –

+0

答えが更新されました。 – PriorityMark

関連する問題