Javascript Chrome中的dispatchEvent,但不在IE11中

Javascript Chrome中的dispatchEvent,但不在IE11中,javascript,dom-events,internet-explorer-11,dispatchevent,Javascript,Dom Events,Internet Explorer 11,Dispatchevent,我正在使用以下代码提交表单: element.dispatchEvent(new Event("submit")); Inspector返回错误: 对象不支持此操作 这在Chrome中工作 此命令的目的是在单击表单时对表单上的提交事件进行分区调用 Jquery不是一个选项我刚刚遇到了同样的问题,但以下内容似乎在IE11中起作用: var event = document.createEvent("Event"); event.initEvent("submit", fals

我正在使用以下代码提交表单:

element.dispatchEvent(new Event("submit"));
Inspector返回错误:

对象不支持此操作

这在Chrome中工作

此命令的目的是在单击表单时对表单上的提交事件进行分区调用


Jquery不是一个选项

我刚刚遇到了同样的问题,但以下内容似乎在IE11中起作用:

var event = document.createEvent("Event");
event.initEvent("submit", false, true); 
// args: string type, boolean bubbles, boolean cancelable
element.dispatchEvent(event);

我收集了各种各样的方法,并实现了这一点:

var customEvent = document.createEvent('HTMLEvents');
customEvent.initEvent('myCustomEvent', true, true);
document.dispatchEvent(customEvent);
老实说,这对我来说没什么意义。它在文档上创建一个事件(将其命名为
HTMLEvents
似乎是必需的),然后使用另一个名称初始化该事件。如果有人能更好地解释这一点,请在下面添加评论,以便将其纳入答案中

在任何情况下,我都可以使用标准事件侦听器在IE11(和现代浏览器)中侦听此自定义事件:

document.addEventListener('myCustomEvent', function(){
  console.log('Event received.');
});

考虑到未来的变化,这是使其适用于IE11和其他浏览器的最佳方法

var event;
if(typeof(Event) === 'function') {
    event = new Event('submit');
}else{
    event = document.createEvent('Event');
    event.initEvent('submit', true, true);
}

$el.dispatchEvent(event);

最好使用polyfil来修复此问题。(自定义事件多边形填充)

然后在javascript中包含/要求它

导入“自定义事件多边形填充”


IE文档:我在Edge中遇到了同样的问题。你能找到解决办法吗?不,不要用这个。这是不推荐使用的,因为如果你想让它在IE上工作,你必须使用它,请参阅,目前,这可能是MS更新他们的软件。是的,如果你想让它与IE11兼容,你必须使用它。不幸的是,对于
CustomEvent
,至少,一个更经得起未来考验的解决方案是使用polyfill。但这可能不适用于
事件
构造函数。请参阅,poly fill修复了我在IE 11中遇到的问题。请注意,IE不会从禁用的元素中分派,与Chrome相反。默认情况下,事件不会冒泡,并且不可取消-请参阅。要在这两种情况下获得相同的行为,应调用initiEvent('submit',false,false)。在DragEvent的情况下,在Edge中不起作用。Hi Mike,'HTMLEvents'不是名称,而是您正在创建的自定义事件的类别。而且“HTMLEvents”似乎不是一个有效值,这进一步让事情变得奇怪您正在创建的实际事件称为
myCustomEvent
(也可以是
change
click
或其他事件),并将其存储在变量
customEvent
中。(我同意,这是一个非常奇怪的界面。)更多信息如下:迟回答,但“HTMLEvents”是一个有效值Eric,你可以在你共享的同一个链接上阅读,它指定“HTMLEvents”确实是一种事件类型。您可以在这里进一步阅读:我的代码与第一个代码完全相同,只是类型只是“Event”。这在Chrome和Firefox上有效,但在Edge上无效。有了“HTMLEvents”,我让Edge也能正常工作!谢谢你的提示迈克:)
# using yarn 
$ yarn add custom-event-polyfill

# using npm 
$ npm install --save custom-event-polyfill