Ana*_*huk 2 javascript events internet-explorer dispatch internet-explorer-11
我在 Internet Explorer 11 中调度事件时遇到问题。目前,我们有:
fireEvent
对于 IE 和
createEvent
initEvent
dispatchEvent
Run Code Online (Sandbox Code Playgroud)
普通浏览器的习惯用法。
问题是这些在 IE 11 中都不起作用。新方法 - 使用new Event()/也不起作用new CustomEvent()。
看起来微软弃用了他们的专有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;
};
Run Code Online (Sandbox Code Playgroud)
这是在 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;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4525 次 |
| 最近记录: |