Estoy creando un evento, así que use el constructor de eventos DOM:
new Event('change');
Esto funciona bien en los navegadores modernos, sin embargo, en Internet Explorer 9, 10 y 11, falla con:
Object doesn't support this action
¿Cómo puedo arreglar Internet Explorer (idealmente a través de un polyfill)? Si no puedo, ¿hay alguna solución que pueda usar?
Respuestas:
Hay un polyfill de IE para el constructor CustomEvent en MDN . Agregar CustomEvent a IE y usarlo en su lugar funciona.
fuente
window.Event= CustomEvent
en la última línea.StorageEvent
ytypeof(StorageEvent)
no funciona. Esto funciona:try { new StorageEvent(); } catch (e) { /* polyfill */ }
.Creo que la mejor solución para resolver su problema y tratar con la creación de eventos entre navegadores es:
fuente
return event
para poder pasárselodispatchEvent()
.initEvent
es antiguo y está en desuso , necesita al menos usar la forma moderna y, como alternativa, usar la forma en desuso.CustomEvent
permite pasar datos personalizados a través de ladetail
opción, yEvent
no lo hace. ¿Me equivoco?Este paquete hace la magia:
https://www.npmjs.com/package/custom-event-polyfill
Incluya el paquete y envíe el evento de la siguiente manera:
fuente
Si solo está tratando de enviar un evento simple como el evento de alternancia HTML, esto funciona en Internet Explorer 11 y en los otros navegadores:
fuente
es6
let
(y no usasvar
) con un código que se supone que se ejecuta en un IE antiguo ... podría confundir a los principiantes que copiarán yIE 9
y más arriba, y tal vez una persona que busca una respuesta que encuentra este hilo, está desarrollando una aplicación para el sistema bancario heredado o algún otro sistema para clientes comerciales que no tienen control sobre sus computadoras y están obligado a trabajar con viejos IE. esto no tiene nada que ver con el soporte técnico de Microsoft ..Hay un servicio de polyfill que puede parchear este y otros para usted
https://polyfill.io/v3/url-builder/
fuente
el
custom-event
paquete npm funcionó muy bien para míhttps://www.npmjs.com/package/custom-event
fuente
Personalmente uso una función de contenedor para manejar eventos creados manualmente. El siguiente código agregará un método estático en todas las
Event
interfaces (todas las variables globales que terminan enEvent
una interfaz de Evento) y le permitirá llamar a funciones comoelement.dispatchEvent(MouseEvent.create('click'));
en IE9 +.EDITAR: La función para buscar todas las
Event
interfaces también se puede reemplazar por una matriz para alterar solo las interfaces de eventos que necesita (['Event', 'MouseEvent', 'KeyboardEvent', 'UIEvent' /*, etc... */]
).fuente