4

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

在 chrome 中,如果您关注第一个文本框然后尝试关注第二个文本框,您将看到以下事件顺序发生:

  1. 从 text1 触发的焦点
  2. 从 text1 发射的模糊
  3. 从 text1 触发的焦点

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

  1. LOG:从 text1 触发焦点
  2. LOG:从 text1 触发的模糊
  3. LOG:从 text1 触发焦点
  4. LOG:从 text2 触发焦点
  5. LOG:从 text2 触发的模糊
  6. LOG:从 text1 触发焦点

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

这是一个演示这个问题的小提琴。该行为仅发生在 IE8 中。

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

4

1 回答 1

0

尽管我不喜欢全局状态,但您似乎无法说服 IE8 不要在第二个文本区域上触发另一个模糊事件,因此您必须解决它。由于第一个 textarea 上的 blur 事件是在第二个获得焦点之前发送的,因此您可以:

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

这是一个 hack,但是在处理有问题的浏览器时,你必须使用一些 hack...

于 2012-08-17T09:01:30.040 回答