您如何根据其名称(例如click
)测试某个事件是否为浏览器事件(例如load
,blur
,click
等)? (和没有我没有使用jquery / mootools / prototype / dojo)
更新:
在此功能中,我附加了浏览器事件(click
和load
),例如:
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
不是这样我将如何测试?
答案 0 :(得分:2)
this solution Juriy Zaytsev(live demo)查看{{3}}。
jQuery本身使用它。
答案 1 :(得分:0)
您可以检查函数/对象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>