AddEventListener 不能在 IE8中工作

我动态地创建了一个复选框。我使用 addEventListener调用了一个函数,只需点击复选框,这个函数可以在谷歌 Chrome 和 Firefox 中使用,但是在 在 Internet Explorer 8里不起作用中不能使用。这是我的暗号:

var _checkbox = document.createElement("input");
_checkbox.addEventListener("click", setCheckedValues, false);

setCheckedValues是我的事件处理程序。

119057 次浏览

您必须在 IE9之前的 IE 版本中使用 attachEvent。检测是否定义了 addEventListener,如果没有,则使用 attachEvent:

if(_checkbox.addEventListener)
_checkbox.addEventListener("click",setCheckedValues,false);
else
_checkbox.attachEvent("onclick",setCheckedValues);
//                         ^^ -- onclick, not click

Note that IE11将删除 attachEvent.

参见:

试试:

if (_checkbox.addEventListener) {
_checkbox.addEventListener("click", setCheckedValues, false);
}
else {
_checkbox.attachEvent("onclick", setCheckedValues);
}

对于 IE9之前的 Internet Explorer 版本,应该使用 附件事件方法将指定的侦听器注册到它所调用的 活动目标,其他版本应该使用 AddEventListener

如果你使用 jQuery,你可以写:

$( _checkbox ).click( function( e ){ /*process event here*/ } )

如果将事件处理委托给另一个元素(例如表) ,可能会更容易(并且性能更好)

$('idOfYourTable').on("click", "input:checkbox", function(){


});

通过这种方式,您将只有一个事件处理程序,并且这也适用于新添加的元素。这需要 jQuery > = 1.7

否则使用委托()

$('idOfYourTable').delegate("input:checkbox", "click", function(){


});

IE 在版本9之前不支持 addEventListener,所以你必须使用 attachEvent,这里有一个例子:

if (!someElement.addEventListener) {
_checkbox.attachEvent("onclick", setCheckedValues);
}
else {
_checkbox.addEventListener("click", setCheckedValues, false);
}

This is also simple crossbrowser solution:

var addEvent =  window.attachEvent||window.addEventListener;
var event = window.attachEvent ? 'onclick' : 'click';
addEvent(event, function(){
alert('Hello!')
});

当然,“点击”可以是任何事件。

您可以使用下面的 addEvent ()函数为大多数事件添加事件,但是请注意,对于 XMLHttpRequest if (el.attachEvent),在 IE8中将会失败,因为它不支持 XMLHttpRequest.attachEvent(),所以您必须使用 XMLHttpRequest.onload = function() {}

function addEvent(el, e, f) {
if (el.attachEvent) {
return el.attachEvent('on'+e, f);
}
else {
return el.addEventListener(e, f, false);
}
}


var ajax = new XMLHttpRequest();
ajax.onload = function(e) {
}

基于以上答案,我选择了快速填充:

//# Polyfill
window.addEventListener = window.addEventListener || function (e, f) { window.attachEvent('on' + e, f); };


//# Standard usage
window.addEventListener("message", function(){ /*...*/ }, false);

当然,就像上面的答案一样,这并不能确保 window.attachEvent的存在,这可能是一个问题,也可能不是。

if (document.addEventListener) {
document.addEventListener("click", attachEvent, false);
}
else {
document.attachEvent("onclick", attachEvent);
}
function attachEvent(ev) {
var target = ev.target || ev.srcElement;
// custom code
}