0

在此处查看测试页面 http://rickchristie.com/testfocus.html

如我错了请纠正我:

  1. onfocus当元素获得焦点时发生。
  2. onblur当元素失去焦点时发生。

在 Firefox 3.6.12(在 mac 和 windows 上测试)中,使用onblurwithoutonfocus工作正常。但是,当输入元素同时具有 onfocus元素onblur时,它会变得很奇怪:

  1. 当您单击输入时,onblur会触发而不是onfocus.
  2. 紧随其后onbluronfocus立即开火。
  3. 您不能在文本框中输入任何内容。

其他浏览器(Safari、Opera)按预期工作。这是一个错误吗?只是我还是每个使用 Firefox 的人都遇到过这种情况?

更新

这种行为似乎只发生在onblur并且onfocus包含alert- 而不是当我使用类似window.log.

4

1 回答 1

1

当警报框打开时,焦点从文本框中移除。请注意,“BLUR”警报框在“FOCUS”警报框的顶部打开(后者先打开),这就是为什么它看起来像onblur之前触发过的原因onfocus

查看我的测试页面,它在调用任一事件处理程序时增加一个计数器,并在其他两个事件处理程序之后添加第二个警报框。尽管浏览器在概念上是单线程模型,但似乎一旦焦点处理程序的警报框打开,Firefox 实际上就开始执行模糊处理程序。但是,当第一个(焦点)警告框关闭时,第二个(模糊)警告框也必须在第三个(焦点后)警告框打开之前关闭。

我不知道 Firefox 为什么会这样。Chrome 会一次又一次地触发焦点处理程序,而 Opera、Safari 和 IE 会按照您所期望的方式执行此操作 - 不会取消文本框的焦点。

编辑:我找到了https://bugzilla.mozilla.org/show_bug.cgi?id=31889并将在那里发布这个测试用例——显然它曾经更糟糕。

于 2010-11-21T04:56:01.377 回答