2012-05-09 4 views
17

Я кодирую простой скрипт для извлечения информации о базе данных в событии ввода keyup.Ключ только после последнего ключа с jquery

Проблема заключается в том, что событие keyup всегда повторяется каждый раз, когда пользователь нажимает клавишу. Как я могу заставить его работать только после нажатия последней клавиши?

Я думаю, что я должен использовать функцию типа setTimeOut() после каждого нажатия клавиши, но я не знаю, как ... вы можете сделать мне простой пример, пожалуйста?

Извините за мой плохой английский :)

Вот что я пытался сделать:

$("input").keyup(function() 
{ 
    var timer=setTimeout(function() { 
    }, 1000); 
    if(!timer) 
    { 
     //do .post ajax request 
    } 
}); 

ответ

36
var timer; 

$("input").on('keyup', function() { 
    clearTimeout(timer); //clear any running timeout on key up 
    timer = setTimeout(function() { //then give it a second to see if the user is finished 
     //do .post ajax request //then do the ajax call 
    }, 1000); 
}); 
+0

отличный ответ, спасибо! – Zippie

6

Вы в основном там. Вам просто нужно очистить таймер, если они вводят другую букву; в противном случае ваш обратный вызов будет выполняться после 1000 мс независимо от того, продолжают ли они печатать.

Что-то, как это должно работать:

$("input").keyup(function (event) 
{ 
    var self = this; 
    if (self.timer) 
     clearTimeout(self.timer); 

    self.timer = setTimeout(function() 
    { 
     self.timer = null; 
     alert(self.value); 
    }, 1000); 

}); 

Где я просто предупреждение, вы бы поместить ваш код АЯКС писать обратно на сервер.

0

Я думаю, что если вы сделаете это с событием onchange, вам не нужно будет устанавливать интервалы времени. когда вы завершаете ввод и меняете фокус. он запускает событие onchange

$("input").onchange(function() 
{ 
    //extract database info 
}