Mam kotwicę, która używa zdarzenia jQuery .click, aby uruchomić kilka funkcji.

jQuery(document).ready(function(){  
    jQuery('a.slide_circ').click(function(){ 
        do_all_functions();
        return false; 
    });
});

Oto kod w skrócie. Działa tak, jak musi, każde kliknięcie na klasę zakotwiczenia slide_circ start do_all_functions.

Ale mam tam problem. Jeśli użytkownik kliknie dwa razy, uruchomi 2 lub więcej razy funkcje... I jak pomysł idzie do diabła.

Myślę, że muszę w jakiś sposób wyłączyć podwójne kliknięcie lub ustawić limit czasu dla mojej funkcji, aby nie działała za każdym razem. Czy ktoś może mi pomóc ?

1
Svetoslav 19 luty 2012, 19:06

3 odpowiedzi

Najlepsza odpowiedź

Użyj metody .data, aby przypisać stan do elementu. Następnie użyj setTimeout, aby zresetować stan:

jQuery(document).ready(function() {
    jQuery('a.slide_circ').click(function() { 
        var $this = jQuery(this);
        if ($this.data('activated')) return false;  // Pending, return

        $this.data('activated', true);
        setTimeout(function() {
            $this.data('activated', false)
        }, 500); // Freeze for 500ms

        do_all_functions();
        return false; 
    });
});
5
Rob W 19 luty 2012, 19:10

Kilka sposobów, aby to zrobić, ale jeden to:

jQuery(document).ready(function(){ 
    var do_all_functions_running = false; 
    jQuery('a.slide_circ').click(function(){
        if (!do_all_functions_running) { 
            do_all_functions_running = true;
            do_all_functions();
            do_all_functions_running = false;
        }
        return false;   
    });  
});

Nie idealnie, ale zadziała.

0
Adrian Lynch 19 luty 2012, 19:21

Możesz sprawdzić ostatnią datę biegu i anulować, jeśli była mniej niż pół sekundy temu:

jQuery(document).ready(function() {
    jQuery('a.slide_circ').each(function() {
        var lastRun = null;

        $(this).click(function() {
            if(lastRun && new Date() - lastRun < 500) {
                // Less than 500ms; ignore.
                return false;
            }

            // Set the last run:
            lastRun = new Date().getTime();

            // Continue:
            do_all_functions();
            return false; 
        });
    });
});

Ma tę zaletę, że jest nieco bardziej wydajny.

0
Ry- 19 luty 2012, 19:33