addEventListener在IE8中不起作用

时间:2012-03-19 12:07:12

标签: javascript internet-explorer-8 addeventlistener

我已动态创建了一个复选框。我已经使用addEventListener来点击复选框来调用某个功能,该功能适用​​于Google Chrome和Firefox,但在Internet Explorer 8中不起作用。这是我的代码:

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

setCheckedValues是我的事件处理程序。

9 个答案:

答案 0 :(得分:213)

尝试:

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

<强>更新:: 对于IE9之前的Internet Explorer版本,应使用attachEvent方法将指定的侦听器注册到调用它的EventTarget,其他addEventListener应该使用。

答案 1 :(得分:43)

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

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

请注意IE11 will remove attachEvent

另见:

答案 2 :(得分:13)

这也是简单的crossbrowser解决方案:

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

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

答案 3 :(得分:3)

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

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

答案 4 :(得分:2)

如果您将事件处理委托给另一个元素,例如您的表

,那么它会更容易(并且具有更高的性能)
$('idOfYourTable').on("click", "input:checkbox", function(){

});

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

否则使用delegate()

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

});

答案 5 :(得分:2)

您可以使用下面的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) {
}

答案 6 :(得分:2)

我已根据上述答案选择了快速填充:

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

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

当然,与上述答案一样,这并不能确保window.attachEvent存在,这可能是也可能不是问题。

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

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