2011-12-15 40 views
0

我使用用戶的鍵盤事件創建了一個Chrome擴展。 但我想提醒用戶,如果元素已經綁定鍵盤事件。如何檢測鍵盤事件已經綁定?

如何檢測鍵事件是否已綁定?

+0

您知道您已經擁有Chrome開發人員工具提供的此信息嗎? – HoLyVieR 2011-12-15 02:16:49

回答

2

這很棘手。事實上,你可以通過幾種不同的方式綁定到HTMLElement的事件。我想最簡單的方法綁定(和檢查,看看是否有被束縛)將是這樣的:

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

的問題,如要求在評論部分這一職務,有沒有真正的方法來檢測如果在綁定事件之前無法更改HTML元素的原型,則由addEventListener或attachEvent添加與程序化javascript相關的事件。 (因此,在事件綁定之前,userscript不能真正更改原型,因爲它在頁面上的所有腳本都運行後運行)。但是,如果它是您自己的頁面,並且您只想監視這些事件更改。你可以做這樣的事情本事到原型:

// 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'來綁定事件呢? 有什麼方法可以檢測到它? – 2011-12-22 07:17:03