Ihre iTimeoutID
ist eine lokale Variable für die .on()
Event-Handler-Funktion und somit ist es jedes Mal zerstört, wenn diese Funktion das nächste Mal abgeschlossen und neu erstellt. Verschiebe es aus diesem Bereich auf eine höhere Ebene oder auf die globale Ebene, damit es von einem Ereignis zum nächsten überleben kann.
Sie können es so machen;
var iTimeoutID = null;
$(document).on('keyup', '#filter_query', function (event) {
var iTypingDelay = 800,
sFilterVal = $.trim($('#filter_query').val()),
sFilterCat = $('#filter_catagory').val(),
sFilterCol = $('#filter_col').val();
if (iTimeoutID) {
clearTimeout(iTimeoutID);
iTimeoutID = null;
}
if (sFilterVal !== "") {
iTimeoutID = setTimeout(function() {
iTimeoutID = null;
searchFunction();
}, iTypingDelay);
}
});
Wenn Sie globale Variablen zu vermeiden, oder Sie haben mehr als eine von ihnen, Sie jQuery verwenden können .data()
wie dies die Timer-ID auf dem Objekt zu speichern:
$(document).on('keyup', '#filter_query', function (event) {
var self = $(this);
var iTimeoutID = self.data("timerID") || null;
var iTypingDelay = 800,
sFilterVal = $.trim($('#filter_query').val()),
sFilterCat = $('#filter_catagory').val(),
sFilterCol = $('#filter_col').val();
if (iTimeoutID) {
clearTimeout(iTimeoutID);
iTimeoutID = null;
}
if (sFilterVal !== "") {
iTimeoutID = setTimeout(function() {
self.data("timerID", null);
searchFunction();
}, iTypingDelay);
}
self.data("timerID", iTimeoutID);
});
Hier ist eine andere Version dass verwendet eine selbstausführende Funktion für einige Variablen als Shell zu handeln, die über die Event-Handler ohne global sein dauern kann:
(function()() {
var iTimeoutID = null;
$(document).on('keyup', '#filter_query', function (event) {
var iTypingDelay = 800,
sFilterVal = $.trim($('#filter_query').val()),
sFilterCat = $('#filter_catagory').val(),
sFilterCol = $('#filter_col').val();
if (iTimeoutID) {
clearTimeout(iTimeoutID);
iTimeoutID = null;
}
if (sFilterVal !== "") {
iTimeoutID = setTimeout(function() {
iTimeoutID = null;
searchFunction();
}, iTypingDelay);
}
});
})();
ist dies etwas war quic k und es gab wenig Chance auf einen Konflikt mit anderem Code und es gibt nur ein Objekt, das vom Event-Handler bedient wird, die erste Option ist völlig in Ordnung.
Wenn der Ereignishandler .on()
mehrere Objekte bedient und jeder seinen eigenen Status verfolgen muss, ist die zweite Option dafür perfekt geeignet.
Wenn Sie nicht mehrere Objekte in demselben Ereignishandler haben, ist die dritte Option die einfachste Möglichkeit, keine neuen globalen Variablen hinzuzufügen.
Hey vielen Dank! Das wird gut funktionieren. – Nykad
Eine weitere Option hinzugefügt - eine selbstausführende anonyme Funktion, die als Shell für nicht-globale Variablen dient, die über den Event-Handler hinweg dauern. – jfriend00