作者shyangs (丹丹)
看板Ajax
标题Re: [ js ] 如何知道 某个元素是否有 Event Listener
时间Tue Dec 29 22:27:35 2009
你这个办法是为 Element 新增 observe method,
observe method 执行 addEventListener,
并设定元素的 __eventListeners 属性来记录。
不过,站长/路人不会知道我新增了 observe method,(因为我这是Greasemonkey script)
他们仍然会用 addEventListener,而这无法被记录。
仍然感谢您的回文。
<html>
<head>
<script>
//为 Element 新增 observe method
Element.prototype.observe = function (eventName, handler) {
if(!this.__eventListeners){
this.__eventListeners = [];
}
this.__eventListeners[eventName] = true;//设定 __eventListeners 属性记录
this.addEventListener(eventName, handler, false);//执行 addEventListener
}
//为 Element 新增 hasEventListener method
// 执行过 elmnt.observe(eventName, handler);
// 再调用 elmnt.hasEventListener(eventName); 会回传 true
Element.prototype.hasEventListener = function (eventName) {
return this.__eventListeners ?
(this.__eventListeners[eventName] ? true : false) : false;
}
function init()
{
var test = document.getElementById('test');
alert(test.hasEventListener('click')); // false
test.observe('click', function() {
alert(test.hasEventListener('click')); // true
});
// 如果站长or路人的脚本使用 addEventListener,而非 observe
//test.observe('mouseover', function(){
test.addEventListener('mouseover', function(){
this.value='There is a mouseover event.';
}, false);
alert(test.hasEventListener('mouseover')); // false, not true
//mouseover event is added by addEventListener //而这无法被记录。
}
</script>
</head>
<body onload="init();">
<input type="button" value="test" id="test">
</body>
</html>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.114.213.80
※ 编辑: shyangs 来自: 58.114.213.80 (12/29 22:27)