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.
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 .
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ż:
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.
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);
}
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(){
});
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) {
}
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.
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*/ } )
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
}
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