JQuery-functie om ergens na Keyup uit te stellen

Ik gebruikte de jQuery AJAX-aanroep om inhoud voor binding te krijgen. Ik moet een tijdje wachten om een ​​ajax-oproep toe te staan ​​om de bewerking uit te voeren. Ik heb voorbeelden gezien met setTimeout in Javascript. Maar ik weet niet hoe ik het moet gebruiken. Ik probeerde het, maar het werkte niet. Pls repareer mijn code om goed te werken.

Code

    $('#ISBN').keyup(function() {
    window.setTimeout(function() {
        var value = $(this).val();
        var Cat = $(this).attr("Id");
        if (value == "" || value == '') {
            $('.Table').remove();
        }
        else {
            $.post('@Url.Action("AutoBibs", "PoDetails")', { Val: value, Category: Cat }, function (data) {

                if (Cat == "ISBN") {
                    $('.Table').remove();
                    $('#' + Cat).after('<div id="ISB" class="find" style="width: 10px !important; margin-left: 0px;">');
                    $('#ISB').html(data);
                    $('#' + Cat).removeClass("wait");
                }                
          });
        }
    }, 2000);
});

Thanks

0
ja ru de
knip de waarde ook zo in. var elmValue = $ .trim ($ (this) .val ());
toegevoegd de auteur naveen, de bron
Ter info, waarde == "" en waarde == '' zijn hetzelfde. Het zijn geen twee verschillende omstandigheden
toegevoegd de auteur asprin, de bron

2 antwoord

this within the context of setTimeout refers to window object not #ISBN element, you should declare the value variable outside the setTimeout context or cache the $(this) object.

var t = '';
$('#ISBN').keyup(function() {
    clearTimeout(t);
    var value = $(this).val();//this.value
   //or cache the object
   //var $this = $(this); 
    t = setTimeout(function() {
   //var value = $this.val(); 
   //...     
    }, 2000);
});
4
toegevoegd
U bent vergeten clearTimeout() te gebruiken om eerdere triggers te annuleren
toegevoegd de auteur Catalin, de bron
+1: vroeg zich af waarom je de iep zelf niet in de cache hebt :)
toegevoegd de auteur naveen, de bron
Bedankt. Dat was waar ik naar op zoek was :)
toegevoegd de auteur Steven, de bron
var searchTimeout = null;
$('#ISBN').keyup(function() {
    clearTimeout(searchTimeout);

    searchTimeout = setTimeout(function() {
       //Here you have the search method
    }, 500);
});
0
toegevoegd
+1, @downvoter: waarom?
toegevoegd de auteur naveen, de bron