Google chrome causing infinite loop on textbox foc

2020-04-05 07:38发布

I'm getting some strange happenings on google chrome. With the following code I'm getting an infinite number of alerts.

<input type="text" />

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

http://jsfiddle.net/XppG9/

Firefox and IE8 are both fine.

Why is this happening in chrome?

5条回答
Deceive 欺骗
2楼-- · 2020-04-05 08:06

The problem is that the alert() is stealing focus from the input box, and then restoring it when the dialog is closed. You can fix this by clearing focus from the input box before you show the alert.

Example: http://jsfiddle.net/XppG9/6/

查看更多
别忘想泡老子
3楼-- · 2020-04-05 08:09

This is happening because it is setting focus back to the text box. Try this it should work fine in Chrome

$('input[type="text"]').live('focus', function(event) {
    alert('in');
    $(this).blur();
});
查看更多
仙女界的扛把子
4楼-- · 2020-04-05 08:10

I think, it's because after you close the dialog (alert box), the focus returns on the textbox, therefore, the function will fire again.

查看更多
别忘想泡老子
5楼-- · 2020-04-05 08:20

Because alert is getting the focus from your text box, and on closing the alert dialog,focus gets back. If you do any non focusing mechanism inside your function , it will trigger only once : http://jsfiddle.net/G8CmV/

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



 $('input[type="text"]').live('focus', function(event) {
    $('#tester').html( $('#tester').html() + "_*" );
  });
查看更多
家丑人穷心不美
6楼-- · 2020-04-05 08:24

I think it's because the the browser is sending focus from the alert to your text field every time you click the alert's "OK" button. You're probably not going to be popping up an alert (methinks) in the final version of your code, so this might not be an issue in the long run.

查看更多
登录 后发表回答