Internet Explorer 9,10和11事件构造函数不起作用
我正在创build一个事件,所以使用DOM Event构造函数:
new Event('change');
这在现代浏览器中工作正常,但是在Internet Explorer 9,10和11中,它失败:
Object doesn't support this action
如何修复Internet Explorer(理想情况下通过填充)? 如果我不能,是否有我可以使用的解决方法?
MDN上的CustomEvent构造函数有一个IE polyfill 。 添加CustomEvent到IE和使用,而不是工程。
(function () { if ( typeof window.CustomEvent === "function" ) return false; //If not IE function CustomEvent ( event, params ) { params = params || { bubbles: false, cancelable: false, detail: undefined }; var evt = document.createEvent( 'CustomEvent' ); evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail ); return evt; } CustomEvent.prototype = window.Event.prototype; window.CustomEvent = CustomEvent; })();
我认为解决您的问题并处理跨浏览器事件创build的最佳解决scheme是:
function createNewEvent(eventName) { if(typeof(Event) === 'function') { var event = new Event(eventName); }else{ var event = document.createEvent('Event'); event.initEvent(eventName, true, true); } }
如果您只是试图发送一个简单的事件,如HTML切换事件,则可以在Internet Explorer 11以及其他浏览器中使用:
let toggle_event = null; try { toggle_event = new Event("toggle"); } catch (error) { toggle_event = document.createEvent("Event"); let doesnt_bubble = false; let isnt_cancelable = false; toggle_event.initEvent("toggle", doesnt_bubble, isnt_cancelable); } // disclosure_control is a details element. disclosure_control.dispatchEvent(toggle_event);
这个软件包有这样的魔力:
https://www.npmjs.com/package/custom-event-polyfill
包括包装和派遣事件如下:
window.dispatchEvent(new window.CustomEvent('some-event'))