Вопрос:

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

javascript internet-explorer-8 addeventlistener

113385 просмотра

9 ответа

5637 Репутация автора

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

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

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

Автор: ravi404 Источник Размещён: 19.03.2012 12:07

Ответы (9)


43 плюса

86238 Репутация автора

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

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

Обратите внимание, что IE11 удалитattachEvent .

Смотрите также:

Автор: Zeta Размещён: 19.03.2012 12:10

213 плюса

88725 Репутация автора

Решение

Пытаться:

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

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

Автор: Sudhir Bastakoti Размещён: 19.03.2012 12:10

0 плюса

10046 Репутация автора

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

$( _checkbox ).click( function( e ){ /*process event here*/ } )
Автор: philipp Размещён: 19.03.2012 12:10

2 плюса

64560 Репутация автора

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

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

});

таким образом, у вас будет только один обработчик событий, и это будет работать и для вновь добавленных элементов. Это требует JQuery> = 1,7

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

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

});
Автор: Nicola Peluchetti Размещён: 19.03.2012 12:11

3 плюса

52964 Репутация автора

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

if (!someElement.addEventListener) {
    _checkbox.attachEvent("onclick", setCheckedValues);
}
else {
    _checkbox.addEventListener("click", setCheckedValues, false);
}
Автор: Adriano Repetti Размещён: 19.03.2012 12:12

13 плюса

3215 Репутация автора

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

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

Вместо «клика» может быть любое событие, конечно.

Автор: Sergey Onishchenko Размещён: 09.02.2013 09:14

2 плюса

21 Репутация автора

Вы можете использовать приведенную ниже функцию 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) {
}
Автор: Anon Размещён: 03.07.2014 06:02

2 плюса

1655 Репутация автора

Я выбрал быстрый Polyfill на основе приведенных выше ответов:

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

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

Конечно, как и ответы выше, это не гарантирует, что window.attachEventсуществует, что может быть или не быть проблемой.

Автор: Campbeln Размещён: 06.01.2015 12:22

0 плюса

27 Репутация автора

if (document.addEventListener) {
    document.addEventListener("click", attachEvent, false);
}
else {
    document.attachEvent("onclick", attachEvent);
}
function attachEvent(ev) {
    var target = ev.target || ev.srcElement;
    // custom code
}
Автор: Pramod Kumar Размещён: 06.04.2017 07:48
Вопросы из категории :
32x32