Como estou criando um evento, use o construtor DOM Event:
new Event('change');
Isso funciona bem em navegadores modernos; no entanto, no Internet Explorer 9, 10 e 11, falha com:
Object doesn't support this action
Como posso corrigir o Internet Explorer (de preferência através de um polyfill)? Se não puder, há uma solução alternativa que posso usar?
internet-explorer-9
internet-explorer-10
internet-explorer-11
dom-events
custom-events
mikemaccana
fonte
fonte
Respostas:
Há um polyfill do IE para o construtor CustomEvent na MDN . Adicionar CustomEvent ao IE e usá-lo funciona.
fonte
window.Event= CustomEvent
na última linha.StorageEvent
etypeof(StorageEvent)
não funciona no MS Edge. Isso funciona:try { new StorageEvent(); } catch (e) { /* polyfill */ }
.Acho que a melhor solução para resolver seu problema e lidar com a criação de eventos entre navegadores é:
fonte
return event
para que eu possa passardispatchEvent()
.initEvent
é antigo e descontinuado , você precisa pelo menos usar a maneira moderna e, como alternativa, usar a maneira descontinuada.CustomEvent
permite passar dados personalizados através dadetail
opção, eEvent
não. Estou errado?Este pacote faz a mágica:
https://www.npmjs.com/package/custom-event-polyfill
Inclua o pacote e despache o evento da seguinte maneira:
fonte
Se você está apenas tentando enviar um evento simples, como o evento de alternância de HTML, isso funciona no Internet Explorer 11 e nos outros navegadores:
fonte
es6
let
(e não usarvar
) com um código deveria ser executado no velho IE .. isso pode confundir os iniciantes que vai copiar e colar esteIE 9
e acima, e talvez uma pessoa que procura uma resposta que encontre esse segmento, esteja desenvolvendo um aplicativo para o sistema bancário herdado ou algum outro sistema para clientes corporativos que não têm controle sobre seus computadores e são obrigado a trabalhar com o antigo IE. isso não tem nada a ver com o suporte da Microsoft ..Existe um serviço de polyfill que pode corrigir isso e outros para você
https://polyfill.io/v3/url-builder/
fonte
o
custom-event
pacote npm funcionou lindamente para mimhttps://www.npmjs.com/package/custom-event
fonte
Pessoalmente, uso uma função de wrapper para manipular eventos criados manualmente. O código a seguir adicionará um método estático em todas as
Event
interfaces (todas as variáveis globais terminadas emEvent
são uma interface de eventos) e permitirá que você chame funções comoelement.dispatchEvent(MouseEvent.create('click'));
no IE9 +.EDIT: A função para encontrar todas as
Event
interfaces também pode ser substituída por uma matriz para alterar apenas as interfaces de evento necessárias (['Event', 'MouseEvent', 'KeyboardEvent', 'UIEvent' /*, etc... */]
).fonte