在IE 11中调度事件的正确方法

时间:2017-03-09 22:17:10

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

我在Internet Explorer 11中调度事件时遇到问题。 目前,我们有:

fireEvent 对于IE 和

createEvent
initEvent
dispatchEvent

普通浏览器的习惯用法。

问题在于,IE 11中的这些都不起作用。新的方式也不行 - 使用new Event() / new CustomEvent()

看起来微软已经弃用了他们的专有fireEvent(对于IE 11),但是 没有为正确的调度提供支持。

PS。我相信我已经在这里阅读了所有与SO相关的主题仍然无法找到工作解决方案

2 个答案:

答案 0 :(得分:0)

回答我自己的问题(感谢@LynnCrumbling指出):

浏览器特定的事件触发行为更好地替换为统一的jQuery调用,如:

var eventObject = jQuery.Event("change"); // event you need to fire
$(targetObject).trigger(eventObject);

答案 1 :(得分:0)

这是我基于此答案的一个完全有效的解决方案: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
    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;
};

这里是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;
};