Google Chrome导致文本框焦点无限循环

时间:2011-07-29 06:23:13

标签: javascript jquery google-chrome

我在Google Chrome上遇到了一些奇怪的事情。使用以下代码,我收到了无数的警报。

<input type="text" />

$('input[type="text"]').live('focus', function(event) {
    alert('in');
});

http://jsfiddle.net/XppG9/

Firefox和IE8都很好。

为什么会发生这种情况?

5 个答案:

答案 0 :(得分:9)

我认为,这是因为关闭对话框(警告框)后,焦点会在文本框中返回,因此,该函数将再次触发。

答案 1 :(得分:5)

我认为这是因为每次单击警报的“确定”按钮时,浏览器都会将警报从警报发送到您的文本字段。您可能不会在代码的最终版本中弹出警报(methinks),因此从长远来看这可能不是问题。

答案 2 :(得分:2)

问题是alert()正在从输入框中窃取焦点,然后在关闭对话框时恢复它。您可以通过在显示警报之前从输入框清除焦点来解决此问题。

示例:http://jsfiddle.net/XppG9/6/

答案 3 :(得分:1)

这种情况正在发生,因为它将焦点设置回文本框。 试试这个它应该在Chrome中正常工作

$('input[type="text"]').live('focus', function(event) {
    alert('in');
    $(this).blur();
});

答案 4 :(得分:0)

由于警报从您的文本框获得焦点,并且在关闭警报对话框时,焦点会重新开始。如果在函数内部执行任何非聚焦机制,它将只触发一次:http://jsfiddle.net/G8CmV/

<input type="text" />
<div id='tester'>Test:</div>



 $('input[type="text"]').live('focus', function(event) {
    $('#tester').html( $('#tester').html() + "_*" );
  });