为了添加事件,我们可以使用这个简单的第一个解决方案:
function AddEvent(html_element, event_name, event_function)
{
if(html_element.attachEvent) //Internet Explorer
html_element.attachEvent("on" + event_name, function() {event_function.call(html_element);});
else if(html_element.addEventListener) //Firefox & company
html_element.addEventListener(event_name, event_function, false); //don't need the 'call' trick because in FF everything already works in the right way
}
或第二个解决方案(添加内联事件):
function AddEvent(html_element, event_name, event_function)
{
var old_event = html_element['on' + event_name];
if(typeof old_event !== 'function')
html_element['on' + event_name] = function() { event_function.call(html_element); };
else
html_element['on' + event_name] = function() { old_event(); event_function.call(html_element); };
}
这些都是跨浏览器,可以这样使用:
AddEvent(document.getElementById('some_div_id'), 'click', function()
{
alert(this.tagName); //shows 'DIV'
});
由于我感觉attachEvent/addEventListener
在事件处理实现中使用得更多,我想知道:
使用我可能更清楚的第二个解决方案是否有任何缺点/缺点?
我可以看到两个,但我对更多(如果有)感兴趣:
- 第二个解决方案通过添加内联事件来破坏元素的innerHTML
- 使用第二个解决方案,我可以轻松删除与特定事件类型 (
html_element['on' + event_name] = null
)关联的所有函数,但我不能detachEvent/removeEventListener
用来完全删除特定函数。
任何诸如“使用 jQuery”或任何其他 FW 之类的答案都是毫无意义的!