2011-12-15 60 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