【问题标题】:Firefox weird onblur behavior (3.6.12)Firefox 奇怪的 onblur 行为 (3.6.12)
【发布时间】:2010-11-21 04:42:27
【问题描述】:

在这里查看测试页面 http://rickchristie.com/testfocus.html

如果我错了,请纠正我:

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

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

  1. 当您点击输入时,onblur 会被触发,而不是 onfocus
  2. onblur 之后,onfocus 立即触发。
  3. 您不能在文本框中输入任何内容。

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

更新

这种行为似乎只在onbluronfocus 包含alert 时才会发生——而不是当我使用window.log 之类的东西时。

【问题讨论】:

    标签: firefox firefox3.6 onblur


    【解决方案1】:

    当警报框打开时,焦点从文本框中移除。请注意,“BLUR”警报框在“FOCUS”警报框的正上方打开(后者首先打开),这就是为什么它看起来像onbluronfocus 之前被触发。

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

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

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

    【讨论】:

    • 这解释了一切。那么哪种行为是正确的呢? Safari 和 Opera 的方式对我来说似乎更合乎逻辑。如果 Firefox 的方式是标准的,那是不是就不能在 onfocus 中添加 alert() 了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2015-09-24
    相关资源
    最近更新 更多