如何检测事件是否为浏览器事件

问题描述:

如何基于名称(例如click)测试事件是否为浏览器事件(例如clickload,blur等)? (和没有我不使用jQuery/mootools的/样机/道场)如何检测事件是否为浏览器事件

UPDATE

在这个函数中附上浏览器事件(clickload)例如:

observe: function(elements, eventName, callback) { 
    if (!(elements.length != null)) { 
    elements = [elements]; 
    } 
    return this.each(elements, function(e) { 
    if (helper.hooks.eventObserved != null) { 
     helper.hooks.eventObserved(eventName, callback, e); 
    } 
    if (typeof e === 'string') { 
     e = this.el(e); 
    } 
    if (e.addEventListener) { 
     return e.addEventListener(eventName, callback, false); 
    } else if (e.attachEvent) { 
     return e.attachEvent("on" + eventName, callback); 
    } 
    }); 
}, 

这触发事件:

fire: function(elements, eventName) { 
    if (!(elements.length != null)) { 
    elements = [elements]; 
    } 
    return this.each(elements, function(e) { 
    var evt; 
    if (document.createEventObject != null) { 
     evt = document.createEventObject(); 
     return e.fireEvent("on" + eventName); 
    } else { 
     evt = document.createEvent('HTMLEvents'); 
     evt.initEvent(eventName, true, true); 
     return !e.dispatchEvent(evt); 
    } 
    }); 
}, 

但我想要测试的事件是否存在,例如click是浏览器事件,但login不是那么我该如何测试?

+3

如果你不使用jQuery/mootools的/样机/道场,那么哪来的事件来自何处,如果他们不“浏览器事件”? – Pointy 2011-04-17 21:04:11

+0

(注意,我拒绝猜测你是一个Qooxdoo用户的诱惑) – Pointy 2011-04-17 21:04:28

+0

我在写我自己的小型JS库 – errorhandler 2011-04-17 21:05:10

结账this solutionJuriy Zaytsevlive demo)。

jQuery本身使用它。

你可以检查,看看是否函数/对象element["on"+event]存在:

<a href="http://www.google.com" id="myAnchor">test</a> 
<script> 

function doesElementHaveEvent(element, event){ 
    return (typeof element["on"+event] != typeof undefined); 
} 

alert(doesElementHaveEvent(document.getElementById("myAnchor"), "click")); // true 
alert(doesElementHaveEvent(document.getElementById("myAnchor"), "login")); // false 
</script>