Debounce-Funktion in jQuery

Lesezeit: 2 Minuten

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.

  • 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

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!");
}));

  • oder $(".my-btn").click($.debounce(250, foo)) selbstverständlich.

    – Kevin B

    5. Januar 2015 um 21:17 Uhr

  • welche jquery-version ist das?

    – Urasquirrel

    14. September 2021 um 20:27 Uhr

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;
}

844310cookie-checkDebounce-Funktion in jQuery

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy