addEventListener nie działa w IE8

Utworzyłem dynamicznie pole wyboru. Użyłem addEventListener do wywołania funkcji po kliknięciu checkboxa, która działa w Google Chrome i Firefox, ale nie działa w Internet Explorer 8 . To jest mój kod:

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

setCheckedValues jest moim opiekunem.

Author: ravi404, 2012-03-19

9 answers

Try:

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

Update:: W przypadku wersji przeglądarki Internet Explorer poprzedzających IE9 należy użyć metody attachEvent do zarejestrowania określonego słuchacza do EventTarget jest on wywoływany, dla innych należy użyć metody addEventListener .

 211
Author: Sudhir Bastakoti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-28 14:02:22

Musisz użyć attachEvent w wersjach IE przed IE9. Wykryj, czy addEventListener jest zdefiniowane i użyj attachEvent, jeśli nie jest:

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

Zauważ, że IE11 usunie attachEvent.

Zobacz też:

 43
Author: Zeta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-12 11:45:11

Jest to również proste rozwiązanie crossbrowser:

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

Zamiast "kliknięcia" może być oczywiście dowolne zdarzenie.

 13
Author: Sergey Onishchenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-09 21:14:03

IE nie obsługuje addEventListener do wersji 9, więc musisz użyć attachEvent, Oto przykład:

if (!someElement.addEventListener) {
    _checkbox.attachEvent("onclick", setCheckedValues);
}
else {
    _checkbox.addEventListener("click", setCheckedValues, false);
}
 3
Author: Adriano Repetti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-17 00:25:15

Może być łatwiej (i ma większą wydajność), jeśli delegujesz obsługę zdarzeń do innego elementu, na przykład do Tabeli

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

});

W ten sposób będziesz miał tylko jedną obsługę zdarzeń, która będzie działać również dla nowo dodanych elementów. To wymaga jQuery >= 1.7

W przeciwnym razie użyj delegate ()

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

});
 2
Author: Nicola Peluchetti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-19 12:11:58

Możesz użyć poniższej funkcji addEvent (), aby dodać zdarzenia dla większości rzeczy, ale zauważ, że dla XMLHttpRequest if (el.attachEvent) nie powiedzie się w IE8, ponieważ nie obsługuje XMLHttpRequest.attachEvent(), więc musisz zamiast tego użyć 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) {
}
 2
Author: Anon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-03 18:28:20

Zdecydowałem się na szybki Polyfill na podstawie powyższych odpowiedzi:

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

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

Oczywiście, podobnie jak powyższe odpowiedzi, nie zapewnia to istnienia window.attachEvent, co może, ale nie musi być problemem.

 2
Author: Campbeln,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-06 00:22:17

Jeśli używasz jQuery możesz napisać:

$( _checkbox ).click( function( e ){ /*process event here*/ } )
 0
Author: philipp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-19 12:10:47
if (document.addEventListener) {
    document.addEventListener("click", attachEvent, false);
}
else {
    document.attachEvent("onclick", attachEvent);
}
function attachEvent(ev) {
    var target = ev.target || ev.srcElement;
    // custom code
}
 0
Author: Pramod Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-06 07:48:39