Ich versuche, die Eingabe einer Schaltfläche mit der jquery-Entprellbibliothek von Ben Alman zu entprellen.
http://benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/
Derzeit ist dies der Code, den ich habe.
function foo() {
console.log("It works!")
};
$(".my-btn").click(function() {
$.debounce(250, foo);
});
Das Problem ist, dass die Funktion nie ausgeführt wird, wenn ich auf die Schaltfläche klicke. Ich bin mir nicht sicher, ob ich etwas falsch verstanden habe, aber soweit ich das beurteilen kann, stimmt mein Code mit dem Beispiel überein.
Ich bin auf das gleiche Problem gestoßen. Das Problem tritt auf, weil die Debounce-Funktion eine neue Funktion zurückgibt, die nirgendwo aufgerufen wird.
Um dies zu beheben, müssen Sie die Entprellfunktion als Parameter an das jquery click-Ereignis übergeben. Hier ist der Code, den Sie haben sollten.
$(".my-btn").click($.debounce(250, function(e) {
console.log("It works!");
}));
In meinem Fall musste ich einen Funktionsaufruf entprellen, der nicht direkt von einem jQuery-Event-Handler generiert wurde, und die Tatsache, dass $.debounce() eine Funktion zurückgibt, machte es unmöglich, sie zu verwenden, also schrieb ich eine einfache Funktion namens callOnce()
das macht dasselbe wie Debounce, kann aber überall verwendet werden.
Sie können es verwenden, indem Sie einfach den Funktionsaufruf mit einem Aufruf von umschließen callOnce()
z.B callOnce(functionThatIsCalledFrequently);
oder callOnce(function(){ doSomething(); }
/**
* calls the function func once within the within time window.
* this is a debounce function which actually calls the func as
* opposed to returning a function that would call func.
*
* @param func the function to call
* @param within the time window in milliseconds, defaults to 300
* @param timerId an optional key, defaults to func
*/
function callOnce(func, within=300, timerId=null){
window.callOnceTimers = window.callOnceTimers || {};
if (timerId == null)
timerId = func;
var timer = window.callOnceTimers[timerId];
clearTimeout(timer);
timer = setTimeout(() => func(), within);
window.callOnceTimers[timerId] = timer;
}
8443100cookie-checkDebounce-Funktion in jQueryyes
Es ist ein wirklich kleines Plugin, aber warum sollten Sie es brauchen, insbesondere für einen Event-Handler, der so einfach zu lösen und erneut zu binden ist -> jsfiddle.net/pgabaeju
– adeneo
5. Januar 2015 um 21:41 Uhr
Wie zwingen Sie Benutzer eines jQuery-Plugins, ein anderes Plugin zu installieren? Dies sollte Teil der Kern-API sein. Auch Ihr jsfiddle-Beispiel, wenn eine Drosselklappe keine Entprellung ist.
– Sukima
17. April 2015 um 20:02 Uhr
welche jquery-version ist das?
– Urasquirrel
14. September 2021 um 20:27 Uhr