我在 Internet Explorer 11 中调度事件时遇到问题。 目前,我们有:
触发事件
浏览器
和
createEvent
initEvent
dispatchEvent
普通浏览器的习语。
问题是这些在 IE 11 中都不起作用。新方法也不起作用 - 使用 new Event()
/new CustomEvent()
。
看起来 Microsoft 弃用了他们专有的 fireEvent
(对于 IE 11)但是
没有提供对正确调度的支持。
附言。我相信我已经阅读了所有与此相关的主题,但仍然找不到有效的解决方案
最佳答案
这是我基于此 SO 答案的完整工作解决方案:https://stackoverflow.com/a/49071358/79677
您可以像这样使用它:SendBrowserAgnosticEvent(myElement, 'change')
它将返回创建的 Event
对象
这是 JavaScript 中的代码
/** This allows us to dispatch browser events in old IE and newer browsers */
export var SendBrowserAgnosticEvent = function(elem, eventName) {
//Needed for IE Support: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent#Browser_Compatibility
//https://stackoverflow.com/a/49071358/79677
var event;
if (typeof(Event) === 'function') {
event = new Event(eventName);
} else {
event = document.createEvent('Event');
event.initEvent(eventName, true, true);
}
elem.dispatchEvent(event);
return event;
};
这里是 TypeScript 中的完整类型
/** This allows us to dispatch browser events in old IE and newer browsers */
export const SendBrowserAgnosticEvent = <T extends HTMLElement | Window>(elem: T, eventName: string): Event => {
//Needed for IE Support: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent#Browser_Compatibility
//https://stackoverflow.com/a/49071358/79677
let event;
if (typeof(Event) === 'function') {
event = new Event(eventName);
} else {
event = document.createEvent('Event');
event.initEvent(eventName, true, true);
}
elem.dispatchEvent(event);
return event;
};
关于javascript - 在 IE 11 中发送事件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42706536/