addEventListener не работает в IE8



Я создал флажок динамически. Я использовал addEventListener чтобы вызвать функцию по щелчку флажка, который работает в Google Chrome и Firefox, но не работает в Internet Explorer 8. Это мой код:



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


setCheckedValues мой обработчик событий.

576   9  

9 ответов:

попробуй:

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

обновление: Для версий Internet Explorer до IE9,attachEvent метод должен использоваться для регистрации указанного слушателя в EventTarget это называется, для других addEventListener должен быть использован.

вы должны использовать attachEvent в версиях IE до IE9. Определить, является ли addEventListener определяется и используется attachEvent если это не так:

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

отметим, что IE11 удалит attachEvent.

Читайте также:

Это также простое кроссбраузерное решение:

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

вместо 'click' может быть любое событие, конечно.

IE не поддерживает addEventListener до версии 9, так что вы должны использовать attachEvent вот пример:

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

возможно, это проще (и имеет большую производительность), если вы делегируете обработку событий другому элементу, например вашей таблице

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

});

таким образом, у вас будет только один обработчик событий, и это будет работать также для вновь добавленных элементов. Для этого требуется jQuery >= 1.7

в противном случае использовать делегат()

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

});

вы можете использовать приведенную ниже функцию addEvent () для добавления событий для большинства вещей, но обратите внимание, что для XMLHttpRequest if (el.attachEvent) не удастся в IE8, потому что он не поддерживает XMLHttpRequest.attachEvent() Так что вы должны использовать .

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 существует, что может быть или не быть проблемой.

Если вы используете jQuery, вы можете написать:

$( _checkbox ).click( function( e ){ /*process event here*/ } )
if (document.addEventListener) {
    document.addEventListener("click", attachEvent, false);
}
else {
    document.attachEvent("onclick", attachEvent);
}
function attachEvent(ev) {
    var target = ev.target || ev.srcElement;
    // custom code
}

Comments

    Ничего не найдено.