【发布时间】:2012-08-16 13:14:35
【问题描述】:
我有两个文本框,都有通过 jQuery 处理的模糊事件。当文本框模糊时,会发生一些验证,如果验证失败,文本框会重新聚焦(我知道这是一个糟糕的想法,但在这种情况下这是理想的行为)。
在 chrome 中,如果您先关注第一个文本框,然后尝试关注第二个文本框,您会看到以下事件发生顺序:
- 从 text1 触发焦点
- 从 text1 发出的模糊
- 从 text1 触发焦点
但是,在 IE8 中,您会看到:
- LOG:从 text1 触发焦点
- LOG:从 text1 触发的模糊
- LOG:从 text1 触发焦点
- LOG:从 text2 触发焦点
- LOG:从 text2 触发的模糊
- LOG:从 text1 触发焦点
在第一个文本框被重新聚焦的情况下,我需要能够防止在第二个文本框上触发焦点和模糊事件。
Here is a fiddle 演示了这个问题。该行为仅发生在 IE8 中。
更多信息:所有这些事件处理程序都绑定在单独的私有范围内,因此两个文本框(据我所知)无法与彼此的处理程序函数交互。
【问题讨论】:
-
您能否提供重现该问题的步骤?当我从第一个文本字段中选择时,它会触发
blur1 focus1 focus2但 1 不会重新获得焦点(FF17)。 -
@FabrícioMatté 添加到问题中
-
我明白了。我认为您可能希望在第二个框获得焦点而不是第一个框模糊时触发第一个框的验证。似乎至少可以解决 FF17 的问题。 jsfiddle.net/ult_combo/zeeth/1(创建更多的处理程序触发,但可以避免)
-
@FabrícioMatté 只有在第一个元素的验证失败时才会重新聚焦 - 第二个文本框无法知道这一点,所以我无法移动 focus() 调用。
-
那会有点棘手。
setTimeout(function() { $('#text1').focus(); }, 0);很丑,会触发第二个文本框的事件,但也会处理它。
标签: javascript jquery events