在Firefox 55.0.3(64位)中,以下javascript(构成对象函数的一部分):
console.log(vField.getAttribute('oninput'));
var vEvent = new Event("input");
var vCancelled = ! vField.dispatchEvent(vEvent);
if (!vCancelled) {
console.log(vEvent);
}
按预期将以下内容输出到Firefox控制台:
H.eventFn(这一点,如图3所示, 'smbtn');
输入{target:< input#mnPWS.string.newP.x01>,isTrusted:false,eventPhase:0,bubbles:false,cancelable:false,defaultPrevented:false,composition:false,timeStamp:7655.60940690126,cancelBubble: false,originalTarget:< input#mnPWS.string.newP.x01&gt ;,explicitOriginalTarget:< input#mnPWS.string.newP.x01> }
问题: dispatchEvent()不执行H.eventFn()函数。 ...除非我在语句之前或之前插入调试器断点:
var vCancelled = ! vField.dispatchEvent(vEvent);
我看到的行为是:
- 使用上面的调试器断点 - 执行H.eventFn()就好了。
- 在上面一行之后的任何地方使用调试器断点 - 不执行H.eventFn()。
- 根本没有断点 - 不执行H.eventFn()。
醇>
(作为旁注 - Chrome使用相同的代码执行H.eventFn(),并且浏览器都没有显示我能看到的任何javascript错误)
我对这种行为感到非常困惑,并且对任何人可能提出的任何意见表示感谢。谢谢!
答案 0 :(得分:0)
在处理过程中发生:
// vField.disabled = true;
我已经确定注释掉禁用该字段的行,如下所示:
GENERATE_SERIES
导致代码工作,不需要断点。
我只能假设:
- 禁用该字段会导致Firefox忽略dispatchEvent(),即使它在dispatchEvent()时再次启用 声明执行。
- ,除非在重新启用之后和dispatchEvent()语句之前存在断点,以某种方式"唤醒它"试。
备注强>
如果有人有任何明智的想法提供比我的bab呀学语更多的见解,请大声喊叫。
注意:请参阅下面的Kaiido评论,以获得有关此问题的非常有效的解决方法。