我遇到这个问题element.dispatchEvent(e);
在Firefox中无法正常使用。
jsFiddle示例我遇到了麻烦。
element.dispatchEvent(e);
会触发,并返回true
,但在小提琴案例中,select
下拉列表的开启时,所需的事件/效果不会发生。
适用于Chrome(版本43.0.2357.134 m) 我使用Firefox 39.0对此进行测试,不知道旧版本或新版本是否属于这种情况。
任何指向正确方向的人都会受到赞赏。
答案 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中,脚本生成的事件并不一定与用户生成的事件完全相同。您可以使用它来触发默认行为,例如选中复选框或跟踪链接,但在许多情况下,它不会做与通过接口实际生成事件相同的事情。它会被解雇,但有限制。
同样,也许有一种方法可以实现你正在尝试的东西,我并不完全确定这是导致这个特定问题的原因,但是很明显通过脚本模仿用户交互的规范并不能保证有效。