2015-12-14 13 views
6

Ich möchte nur das erreichen. Wenn der Benutzer das Keyword-Beispiel "stackoverflow" sucht, möchte ich nur danach einen Ajax-Aufruf senden. Nicht jedes Mal, wenn er irgendeine Taste drückt. So kann ich jedes Mal, wenn ich eine Taste drücke, viel Ajax-Anruf speichern.Tun Sie etwas nach zwei Sekunden Keyup

Ich versuche zu überprüfen, dass, wenn Benutzer nicht noch einmal für zwei Sekunden, nachdem er eine beliebige Taste drücken, dann bin ich ajax Anruf senden. aber ich weiß nicht, was Intervall zu verwenden oder Zeit festzulegen, bitte helfen und hoffe, dass Sie verstehen können, was ich versuche zu erklären. Danke

hier ist mein kleiner Code.

$(document).ready(function(){ 
    var counter = 0; 
    $("#input").keyup(function(){ 

     var myInterval = setInterval(function() { 
      ++counter; 
     }, 1000); 

     if(myInterval > 2) 
     { 
      alert('ajax call going'); 
      clearInterval(myInterval); 
     } 
     else 
     { 
      alert('doing nothing'); 
     } 
    }) 
}) 
+1

duplizieren http://stackoverflow.com/questions/1836105/how-to-wait-5-seconds-with-jquery –

+3

nicht Duplizieren Sie diese Frage ist anders –

Antwort

3
var _changeInterval = null; 

$("#input").keyup(function() { 
    // wait untill user type in something 
    // Don't let call setInterval - clear it, user is still typing 
    clearInterval(_changeInterval) 
    _changeInterval = setInterval(function() { 
     // Typing finished, now you can Do whatever after 2 sec 
     clearInterval(_changeInterval) 
    }, 2000); 

}); 

Hinweis: -Code von SO wenigen Monaten zurückgenommen, nicht Erinnere dich an den Link

Bearbeiten:

Überprüfen Sie diese jsFiddle. Kommentare im Code überprüfen und in der Konsole ausgeben für besseren Untersatz

+0

:) Danke für den Code besten Code so weit, aber ich wirklich dnt wissen, wie seine Arbeiten. Ich kann den Fluss nicht verstehen –

+0

@TariqHusain Bitte lesen Sie Inline-Kommentare. Wenn es immer noch nicht klar ist, werde ich versuchen, es zu erklären. –

+0

Sie haben klare bereits das Intervall clearInterval (_changeInterval): dann, wie es noch nach 2 Sekunden –

1

Try this:

<script src="//code.jquery.com/jquery-1.11.2.min.js"></script> 
<input type="text" id="input"> 
<script> 
$(document).ready(function(){ 
    $("#input").keyup(function(){ 
     var str = $(this).val(); 
     setTimeout(function(){ 
      if(str == $("#input").val()) { 
       alert('ajax call going'); 
      } 
     }, 2000); 
    }); 
}); 
</script> 
+0

LastTime nicht definiert –

+0

Sie können die erste Zeile verpasst werden: var LastTime = new Date(); –

+0

immer noch nicht funktioniert es nicht warten auf zwei Sekunden. Immer wenn ich nach dem Drücken auf die Taste klicke, wird der Ajax-Anruf aktiviert. –

2

Hoffnung, das wird helfen ...

$("#input").keyup(function(){ 
    var x=$("#input").val(); 
    setTimeout(function(){ 
     if(x==$("#input").val()) { 
      alert('ajax call going'); 
     } 
    }, 3000); 
}); 
+0

das wird mir nicht helfen. entsprechend deiner antwort, wenn ich getippt habe, wird es einen ajax-ruf 5 mal aber 3 sek spät beenden. Ich will nur einmal nicht 5 Mal –

+0

es wird nicht Ajax fünf Zeit aufrufen, wie Sie die Variable x überprüft den Wert der Eingabe, die .. so die Ajax-Anfrage wird nur gehen, wenn der Benutzer mit der Eingabe .. Das ist, warum die 3 Sekunden Verzögerung – Sameer

+0

lass mich zuerst versuchen :) –

1

Wenn Ihr Benutzer fortlaufend wie 20 Zeichen schreibt, dann? setTimeout ruft nach der Zeit (nach den definierten Sekunden) auf. Wenn Sie den richtigen Weg wollen, dann verwenden Sie Debounce.

$(function(){ 

var default_text = $('#text-type').text(), 
    text_counter_1 = 0, 
    text_counter_2 = 0; 

// This function is not debounced, but instead bound directly to the event. 
function text_1() { 
    var val = $(this).val(), 
    html = 'Not-debounced AJAX request executed: ' + text_counter_1++ + ' times.' 
    + (val ? ' Text: ' + val : ''); 

    $('#text-type-1').html(html); 
}; 

// This function is debounced, and the new, debounced, function is bound to 
// the event. Note that in jQuery 1.4+ a reference to either the original or 
// debounced function can be passed to .unbind to unbind the function. 
function text_2() { 
    var val = $(this).val(), 
    html = 'Debounced AJAX request executed: ' + text_counter_2++ + ' times.' 
    + (val ? ' Text: ' + val : ''); 

    $('#text-type-2').html(html); 
}; 

// Bind the not-at-all debounced handler to the keyup event. 
$('input.text').keyup(text_1); 

// Bind the debounced handler to the keyup event. 
$('input.text').keyup($.debounce(250, text_2)); // This is the line you want! 

// Trigger the callbacks once to show some initial (zero) values. 
text_1(); 
text_2(); 
}); 

BlogHier anschauliches Beispiel
Blog 2

+1

check für die neue akzeptierte Antwort es funktioniert Präfekt –

+0

ja das ist die genaueste Antwort +1 –

Verwandte Themen