javascript - 在 IE 11 中发送事件的正确方法

标签 javascript internet-explorer events internet-explorer-11 dispatch

我在 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/

相关文章:

javascript - 没有标签的不相交联合

javascript - 按钮此绑定(bind)指向窗口

css - IE/Edge 中复选框失败的切换布局

html - 放大 IE 会破坏相邻元素

c++ - 如何在 C/C++ 中检查 USB 是否插入或移除

javascript - 流体动力学模拟,有障碍物

javascript - jsrender 检查字符串是否为空 ""

jquery - ajax在ie10中返回空结果

jQuery:在这种情况下 .on() 的正确用法是什么?

c++ - Windows 中的按键事件