Google Chrome вызывает бесконечный цикл в фокусе текстового поля - PullRequest
6 голосов
/ 29 июля 2011

Я получаю некоторые странные события в Google Chrome.С помощью следующего кода я получаю бесконечное количество предупреждений.

<input type="text" />

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

http://jsfiddle.net/XppG9/

Firefox и IE8 в порядке.*

Почему это происходит в Chrome?

Ответы [ 5 ]

9 голосов
/ 29 июля 2011

Я думаю, это потому, что после закрытия диалогового окна (окна оповещения) фокус возвращается на текстовое поле, поэтому функция снова срабатывает.

5 голосов
/ 29 июля 2011

Я думаю, это потому, что браузер отправляет фокус из предупреждения в ваше текстовое поле каждый раз, когда вы нажимаете кнопку "ОК" в предупреждении. Скорее всего, вы не будете отображать предупреждение (метинксы) в окончательной версии вашего кода, так что в долгосрочной перспективе это может не быть проблемой.

2 голосов
/ 29 июля 2011

Проблема в том, что alert() крадет фокус из поля ввода, а затем восстанавливает его при закрытии диалога. Это можно исправить, очистив фокус от поля ввода перед отображением предупреждения.

Пример: http://jsfiddle.net/XppG9/6/

1 голос
/ 29 июля 2011

Это происходит потому, что он устанавливает фокус обратно на текстовое поле.Попробуйте это, он должен нормально работать в Chrome

$('input[type="text"]').live('focus', function(event) {
    alert('in');
    $(this).blur();
});
0 голосов
/ 29 июля 2011

Поскольку предупреждение получает фокус от вашего текстового поля, и при закрытии диалогового окна предупреждения фокус возвращается. Если вы используете какой-либо механизм не фокусировки внутри своей функции, он сработает только один раз: http://jsfiddle.net/G8CmV/

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



 $('input[type="text"]').live('focus', function(event) {
    $('#tester').html( $('#tester').html() + "_*" );
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...