我见过这3个:
if(window.attacheEvent)
if(document.attachEvent)
if(element.attachEvent)
注意:
元素随时可用。
请不要图书馆
应用每个答案的Fascade模式
$NS.addEventL = (function determineEventBinding(){
if(window.attachEvent){
return function attachEvent(element, type, callNow){
element.attachEvent('on' + type, callNow);
}
}
else {
return function addEventListener(element, type, callNow){
element.addEventListener(type, callNow);
}
}
}());
答案 0 :(得分:1)
它们都是“正确的”,因为它们会产生相同的结果(假设element
是一个DOM节点)。 window
和document
的优势在于您不必创建或查找要测试功能的元素,这意味着您可以更有效地执行测试。
你说element
随时可用:这表明你正在编写一个插件/库/模块,它创建元素并将事件绑定到它们。我会说,分开你的事件:
你可能有这样的代码:
function createButton(){
// Create element
var button = document.createElement('input');
// Bind event
if(button.attachEvent){
button.attachEvent('onclick', actionTrigger);
}
else {
button.addEventListener('click', actionTrigger, false);
}
return button;
}
您可能最好自己编写自己的包装函数:
var bindEvent = (function determineEventBinding(){
if(window.attachEvent){
return function attachEvent(element, hook, func){
element.attachEvent('on' + hook, func);
}
}
else {
return function addEventListener(element, hook, func){
element.addEventListener(hook, func, false);
}
}
}());
...然后在编写功能代码时使用你的包装器忘记所有头痛:
function createButton(){
// Create element
var button = document.createElement('input');
// Bind event
bindEvent(button, 'click', actionTrigger);
return button;
}
优点是多方面的: