В jquery, как я могу вызвать функцию, если кто-то не набрал за 1 секунду? - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть <div>, в котором есть список элементов load(), содержащий ключевое слово, введенное в текстовом вводе, инициируемом keyup().Когда я также запускаю плагин jquery, который выделяет это ключевое слово в соответствующих элементах поиска в keyup (), он замедляет страницу и даже может привести к сбою в работе моего браузера.

Так что мне интересно, есть ли способ, с помощью которого я могу активировать эту функцию подсветки только после того, как человек не набрал ни одной буквы в секунду или две, и ТО активирует подсветку.Или, может быть, есть какой-то способ сохранить его в конце очереди, чтобы он всегда срабатывал последним?

thx

Ответы [ 3 ]

4 голосов
/ 15 декабря 2011

Сохранить глобальную переменную тайм-аута, такую ​​как var myTimeout = null;. Внутри вашего обработчика keyup () вы можете запустить myTimeout = window.setTimeout(highlight, 1500); и отменить (предыдущий) тайм-аут, если он все еще работает. Внутри функции выделения вы снова сбрасываете myTimeout на ноль.

Что-то в строках

var myTimeout = null;

$('#whatever').keyup(function() {
   if(myTimeout) clearTimeout(myTimeout);
   ....
   myTimeout = window.setTimeout(highlight, 1500);
});

function highlight() {
   myTimeout = null;
   ...
}
2 голосов
/ 15 декабря 2011

Используйте setTimeout, чтобы установить функцию для запуска через 2 с, и пользователь clearTimeout, чтобы отменить ее до завершения 2 с:

var timeoutId;

$("input").keyup(function(){

    if(timeoutId){
      clearTimeout(timeoutId);
    }

    timeoutId = setTimeout(intervalFunc, 2000); 
});

Вот пример: http://jsfiddle.net/tdbsY/

1 голос
/ 15 декабря 2011

Вы хотите использовать setTimeout для задержки вызова, чтобы выделить, и clearTimeout, если новое нажатие клавиши получено до того, как эта секунда прошла:

var timeout;

$('#my-input').keyup(function() {

    // clear previous timeout if there was one
    window.clearTimeout(timeout);

    // set new one
    timeout = setTimeout(function() {

        // make your highlight call here

    }, 1000);

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...