Tworzę wydarzenie, więc użyj konstruktora DOM Event:
new Event('change');
Działa to dobrze w nowoczesnych przeglądarkach, jednak w Internet Explorer 9, 10 i 11 kończy się niepowodzeniem z:
Object doesn't support this action
Jak mogę naprawić Internet Explorera (najlepiej za pomocą polyfill)? Jeśli nie mogę, czy istnieje obejście, którego mogę użyć?
internet-explorer-9
internet-explorer-10
internet-explorer-11
dom-events
custom-events
mikemaccana
źródło
źródło
Odpowiedzi:
Istnieje wypełnienie IE dla konstruktora CustomEvent w MDN . Dodanie CustomEvent do IE i używanie go zamiast tego działa.
źródło
window.Event= CustomEvent
w ostatniej linii.StorageEvent
itypeof(StorageEvent)
nie działa w MS Edge. Działa to:try { new StorageEvent(); } catch (e) { /* polyfill */ }
.Myślę, że najlepszym rozwiązaniem do rozwiązania Twojego problemu i radzenia sobie z tworzeniem wydarzeń w różnych przeglądarkach jest:
źródło
return event
więc mogę to przekazaćdispatchEvent()
.initEvent
jest stary i przestarzały , musisz przynajmniej użyć nowoczesnego sposobu i jako rozwiązania zastępczego użyć przestarzałego sposobu.CustomEvent
pozwala na przekazywanie niestandardowych danych przezdetail
opcję, aEvent
nie. Czy się mylę?Ten pakiet robi magię:
https://www.npmjs.com/package/custom-event-polyfill
Dołącz paczkę i wyślij zdarzenie w następujący sposób:
źródło
Jeśli próbujesz tylko wywołać proste zdarzenie, takie jak zdarzenie przełączania HTML, działa to w programie Internet Explorer 11, a także w innych przeglądarkach:
źródło
es6
let
(i nie używaszvar
) z kodem, który ma działać na starym IE .. może to zmylić początkujących, którzy to skopiują iIE 9
i powyżej, a być może osoba szukająca odpowiedzi, która znajdzie ten wątek, tworzy aplikację dla starszego systemu bankowego lub innego systemu dla klientów biznesowych, którzy nie mają kontroli nad swoimi komputerami i są zobowiązany do pracy ze starym IE. nie ma to nic wspólnego z pomocą techniczną firmy Microsoft ..Istnieje usługa polyfill, która może załatać to i inne za Ciebie
https://polyfill.io/v3/url-builder/
źródło
Osobiście używam funkcji opakowującej do obsługi ręcznie utworzonych zdarzeń. Poniższy kod doda statyczną metodę do wszystkich
Event
interfejsów (wszystkie zmienne globalne kończące się naEvent
są interfejsem Event) i umożliwi wywoływanie funkcji takich jakelement.dispatchEvent(MouseEvent.create('click'));
w IE9 +.EDYCJA: Funkcję znajdującą wszystkie
Event
interfejsy można również zastąpić tablicą, aby zmienić tylko potrzebne interfejsy zdarzeń (['Event', 'MouseEvent', 'KeyboardEvent', 'UIEvent' /*, etc... */]
).źródło
the
custom-event
pakiet npm pięknie pracował dla mniehttps://www.npmjs.com/package/custom-event
źródło