2010-03-22 3 views
0

O, так что у меня есть поисковый запрос ajax «в реальном времени», в котором в настоящее время выполняется поиск по sql (через ajax) на каждом ключе вверх.Таймер Javascript, который перезапускается на клавиатуре?

Что я предпочел бы, чтобы:

запустить поиск SQL после ключа не была нажата в течение 800 миллисекунд сказать

.

Так я хочу иметь таймер, который запускается на клавишу вверх, если таймер достигает 800ms, то Аякса называется, если новое событие KeyUp происходит таймер перезапускается

как бы я сделай это?

ответ

2

Существует отличный плагин TypeWatch, который вы можете посмотреть (IIRC StackOverflow использует это для страницы Users). Вот Пример использования:

$("#textId").typeWatch({ 
    highlight: true, 
    wait: 800, 
    captureLength: -1, 
    callback: function() { 
     // changed text 
    } 
}); 
+0

абсолютно идеальный! – Haroldo

5
(function() { 

var theTimeout; 

function doSearch() { 
    // Do Search 
}; 

$('#theField').bind('keyup', function() { 
    clearTimeout(theTimeout); 

    theTimeout = setTimeout(doSearch, 800); 
}); 

}()) 
+2

+1, просто набрал аналогичное решение. –

+0

+1 для ввода того же решения! : P – Matt

+0

Может возникнуть идея также пропустить глобальную переменную, но это, безусловно, задача оператора: –

0

Я имел эту проблему, мое решение было это:

var doAjax = 0 
$("input#name").keyup(function(){ 
    doAjax++; 
    setTimeout(function(){ 
     doAjax--; 
     if(doAjax>=1){ 
      return; 
     } 
     $.post("do_ajax", { ... 

Незнайка, если это является лучшим решением, но это работает :)

Смежные вопросы