【问题标题】:Why is the input's focus event never thrown in Firefox? (Works in Chrome)为什么输入的焦点事件永远不会在 Firefox 中抛出? (在 Chrome 中工作)
【发布时间】:2014-11-05 21:39:24
【问题描述】:

以下代码适用于 Chrome,但不适用于 Firefox。如何触发焦点事件?

http://jsfiddle.net/aeko9o7t/1/

HTML:

<input id="one" type="text" />
<input id="two" type="text" />

JavaScript:

var one = document.getElementById( "one" );
var two = document.getElementById( "two" );

one.addEventListener( "focus", function() { console.log( "one called" ); }, false );
one.focus();
two.addEventListener( "focus", function() { console.log( "two called" ); }, false );
two.focus();

在 Firefox 中,两者都没有焦点,控制台从不写任何东西,但在 Chrome 中它可以工作。

即使添加 setTimeout 仍然不会导致它触发:http://jsfiddle.net/aeko9o7t/4/

【问题讨论】:

标签: javascript html google-chrome firefox


【解决方案1】:

一般来说,您只能依赖由于用户交互或异步事件而触发的事件。浏览器在是否为程序代码引起的操作触发事件方面存在差异。

因此,当您单击字段以赋予它们焦点时,FF 将运行事件侦听器,但当焦点来自 .focus() 方法时,则不会。

在这些问题中对这些类型的事件进行了一些讨论:

Is JavaScript guaranteed to be single-threaded?

Is there something as "immediate events" in Javascript?

【讨论】:

  • 虽然您的第一点可能是正确的,但它与您发布的两个链接无关,但出于 Mozilla 的安全考虑,更有可能是 。但是,它似乎没有遵循规范。
猜你喜欢
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多