我有两个文本框,都有通过 jQuery 处理的模糊事件。当文本框模糊时,会进行一些验证,如果验证失败,文本框会重新聚焦(我知道这是一个糟糕的想法,但在这种情况下这是理想的行为)。
在 chrome 中,如果您聚焦第一个文本框然后尝试聚焦第二个文本框,您将看到事件发生的顺序:
- 焦点从 text1 触发
- blur 从 text1 触发
- 焦点从 text1 触发
然而,在 IE8 中,您会看到:
- LOG:焦点从 text1 触发
- 日志:从 text1 触发模糊
- LOG:焦点从 text1 触发
- LOG:焦点从 text2 触发
- 日志:从 text2 触发模糊
- LOG:焦点从 text1 触发
我需要能够防止在第一个文本框重新聚焦的情况下在第二个文本框上触发焦点和模糊事件。
Here is a fiddle证明问题。该行为仅发生在 IE8 中。
更多信息:所有这些事件处理程序都绑定(bind)在单独的私有(private)范围内,因此这两个文本框无法(据我所知)与彼此的处理程序函数进行交互。
最佳答案
虽然我不喜欢全局状态,但似乎您无法说服 IE8 不在第二个文本区域上触发另一个模糊事件,因此您必须解决它。由于第一个文本区域的模糊事件在第二个文本区域获得焦点之前发送,您可以:
- 检查验证是否失败,如果失败,则在全局变量中标记您当前正在验证 textarea1
- 在聚焦/模糊时,如果有另一个元素而不是当前元素正在被验证,则忽略该事件并返回
- 如果验证成功,从全局变量中移除当前正在验证的元素
这是一个 hack,但是在处理有问题的浏览器时,你必须使用一些 hack...
关于javascript - 从模糊事件重新聚焦元素时防止第二个元素模糊(仅限 IE8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11987973/