Dynamicznie utworzyłem checkbox. Kiedyś addEventListener
wywoływałem funkcję po kliknięciu pola wyboru, 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 programem obsługi zdarzeń.
Musisz używać
attachEvent
w wersjach IE wcześniejszych niż IE9. Sprawdź, czyaddEventListener
jest zdefiniowany i użyj,attachEvent
jeśli nie jest:Zauważ, że IE11 usunie
attachEvent
.Zobacz też:
element.addEventListener
Starsza wersja programu Internet Explorer i attachEventźródło
To również jest proste rozwiązanie dla różnych przeglądarek:
Zamiast „kliknięcia” może być oczywiście dowolne zdarzenie.
źródło
addEventListener
Trzeci argument i tak jest opcjonalny, więc może to być dobre rozwiązanie i jest ładniejsze niż gałęzie if-else. Ale w tym przypadku_checkbox
jest elementem docelowym, a niewindow
. :) Więc może mógłbyś stworzyć funkcję, w której celem zdarzenia jest inny argument.addEventListener
- zobacz ten temat: stackoverflow.com/questions/1007340/… . Tak więc w przypadkuwindow
obiektu działa poprawnie, ale nie działa z innymi węzłami w dokumencie. W ten sposób sugerowane przez ciebie aliasowanie NIE jest poprawne dla przypadku wymienionego w pierwotnym pytaniu! Jakie byłoby twoje obejście?IE nie obsługuje
addEventListener
aż do wersji 9, więc musisz użyćattachEvent
, oto przykład:źródło
Być może łatwiej (i ma większą wydajność), jeśli delegujesz obsługę zdarzeń do innego elementu, na przykład do tabeli
w ten sposób będziesz mieć tylko jedną procedurę obsługi zdarzeń, która będzie działać również dla nowo dodanych elementów. Wymaga to jQuery> = 1.7
W przeciwnym razie użyj delegate ()
źródło
Możesz użyć poniższej funkcji addEvent (), aby dodać zdarzenia dla większości rzeczy, ale pamiętaj, że dla XMLHttpRequest
if (el.attachEvent)
nie powiedzie się w IE8, ponieważ nie obsługuje,XMLHttpRequest.attachEvent()
więc musisz użyćXMLHttpRequest.onload = function() {}
zamiast tego.źródło
Zdecydowałem się na szybkie Polyfill w oparciu o powyższe odpowiedzi:
Oczywiście, podobnie jak powyższe odpowiedzi, tego nie gwarantuje
window.attachEvent
, istnieje, co może, ale nie musi, stanowić problem.źródło
Jeśli używasz jQuery, możesz napisać:
źródło
źródło