document.dispatchEvent()在Firefox中不起作用

时间:2015-07-18 13:16:18

标签: javascript jquery html firefox

我遇到这个问题element.dispatchEvent(e);在Firefox中无法正常使用。

jsFiddle示例我遇到了麻烦。

element.dispatchEvent(e);会触发,并返回true,但在小提琴案例中,select下拉列表的开启时,所需的事件/效果不会发生。

适用于Chrome(版本43.0.2357.134 m) 我使用Firefox 39.0对此进行测试,不知道旧版本或新版本是否属于这种情况。

任何指向正确方向的人都会受到赞赏。

1 个答案:

答案 0 :(得分:7)

这可能不是完整的答案,因为broswer处理选择元素和事件的方式存在很多差异,但部分问题可能归因于isTrusted的{​​{1}}属性宾语。看这里: https://developer.mozilla.org/fr/docs/Web/API/Event/isTrusted

您可以看到浏览器之间已经存在差异:

  

在Firefox中,如果某个事件是由用户调用而不是中,则该事件是受信任的   如果它被脚本调用则受信任。

     

在Internet Explorer中,除了那些事件外,所有事件都是可信任的   使用createEvent()方法创建。

     

Chrome不支持此属性。

如果你看一下Event意味着什么: http://www.w3.org/TR/2012/WD-DOM-Level-3-Events-20120614/#trusted-events

  

由用户代理生成的事件   用户交互,或者作为DOM更改的直接结果   由用户代理信任,具有未提供的权限   脚本通过的事件生成的事件   DocumentEvent.createEvent(" Event")方法,使用修改   Event.initEvent()方法,或通过   EventTarget.dispatchEvent()方法。受信任的isTrusted属性   events的值为true,而不受信任的事件的值为isTrusted   属性值为false。

     

大多数不受信任的事件都不应该触发默认操作   click或DOMActivate事件的例外。这些事件触发了   激活触发器的默认操作(请参阅激活触发器和   更多细节的行为);这些不受信任的事件有一个isTrusted   属性值为false,但仍会启动任何默认操作   向后兼容性。所有其他不受信任的事件必须表现得像   已经在该事件上调用了Event.preventDefault()方法。

基本上,至少在Firefox中,脚本生成的事件并不一定与用户生成的事件完全相同。您可以使用它来触发默认行为,例如选中复选框或跟踪链接,但在许多情况下,它不会做与通过接口实际生成事件相同的事情。它会被解雇,但有限制。

同样,也许有一种方法可以实现你正在尝试的东西,我并不完全确定这是导致这个特定问题的原因,但是很明显通过脚本模仿用户交互的规范并不能保证有效。