从blur事件重新聚焦元素时防止第二个元素模糊(仅限IE8)

时间:2012-08-16 13:14:36

标签: javascript jquery events

我有两个文本框,都有通过jQuery处理的模糊事件。当文本框模糊时,会发生一些验证,如果验证失败,文本框会重新聚焦(我知道这是一个糟糕的想法,但在这种情况下它是理想的行为)。

在chrome中,如果你聚焦第一个文本框然后尝试聚焦第二个文本框,你会看到这个事件顺序发生:

  1. 焦点从text1
  2. 开始
  3. 从text1
  4. 开始模糊
  5. 焦点从text1
  6. 开始

    但是,在IE8中,您会看到:

    1. 日志:焦点从text1
    2. 开始
    3. 日志:从text1
    4. 开始模糊
    5. 日志:焦点从text1
    6. 开始
    7. 日志:焦点从text2
    8. 开始
    9. 日志:从text2开始模糊
    10. 日志:焦点从text1
    11. 开始

      在重新聚焦第一个文本框的情况下,我需要能够防止在第二个文本框中触发焦点和模糊事件。

      Here is a fiddle证明了这个问题。该行为仅发生在IE8中。

      更多信息:所有这些事件处理程序都绑定在单独的私有作用域中,因此两个文本框无法(我知道)与彼此的处理函数进行交互。

1 个答案:

答案 0 :(得分:0)

虽然我不喜欢拥有全局状态,但似乎你不能说服IE8不要在第二个textarea上发起另一个模糊事件,所以你必须解决它。由于第一个textarea上的模糊事件是在第二个文本区域聚焦之前发送的,因此您可以:

  • 检查验证是否失败,如果验证失败,请在全局变量中标记您当前正在验证textarea1
  • 关于焦点/模糊,如果有另一个元素被验证而不是当前元素,则忽略该事件并返回
  • 如果验证成功,则从全局变量
  • 中删除当前验证的元素

这是一个黑客,但在处理有缺陷的浏览器时,你必须使用一些黑客......