webForumDet fria alternativet

Begränsa knapptryckningar...

6 svar · 638 visningar · startad av Travoni

TravoniMedlem sedan okt. 20041 538 inlägg
#1

Jag vill att funktionen bara skall köras var 3:de sekund oavsätt hur mycket man än knackar på knappen.
Jag skulle ju kunna disabla den vid knapptryckning men jag vill inte det.

Denna funkar inte...

var enabled = true;
$('#button').click( function(){
    enabled=fill_list();
    return true;
});

var fill_list = function() {
        if(enabled) {
            setTimeout(function(){
                $('#myDiv').html("Klick " + $('#asdf').html());
            }, 3000);
            return false;         
        } else {
            return true;
        }
}
...
<button id="button">Starta</button>
<div id="myDiv"></div>
l-boyMedlem sedan juli 2003223 inlägg
#2

$(function() {
  
  var enabled = false;
  
  $("#button").click(function()
 {
   if(!enabled) {
     enabled = true;
    setTimeout(function()
     {
       console.log("click!");
       enabled=false;
     },3000);
   }
 });
  
});

Kanske?

l-boyMedlem sedan juli 2003223 inlägg
#3

Flytta upp console.log raden ovanför settimeout om du inte vill ha en tre sekunders fördröjning efter man klickat på knappen.

nitro2k01Medlem sedan aug. 20037 630 inlägg
#4
var enabled = true;
$('#button').click( function(){
    if(enabled) {
        enabled = false;

        setTimeout(function(){
            enabled = true;
        }, 3000);

        fill_list();
    }
});

var fill_list = function() {
    $('#myDiv').html("Klick " + $('#asdf').html());
}
...
<button id="button">Starta</button>
<div id="myDiv"></div>

När du klickar sätts enabled till false, om det tidigare var true. Och timeouten återställer enabled efter tre sekunder. Du kan ju även disablea själva knappen för att göra det tydligare för användaren vad som pågår.

$('#button').click( function(){
    $("#button").attr("disabled", "disabled");

    setTimeout(function(){
        $("#button").removeAttr("disabled");
    }, 3000);

    fill_list();
});

var fill_list = function() {
    $('#myDiv').html("Klick " + $('#asdf').html());
}
...
<button id="button">Starta</button>
<div id="myDiv"></div>

Då slipper du en if-sats som ersätts av att det inte går att klicka på knappen.

TravoniMedlem sedan okt. 20041 538 inlägg
#5

nitro2k01 skrev:

Du kan ju även disablea själva knappen för att göra det tydligare för användaren vad som pågår.

Me, my self and I skrev:

Jag skulle ju kunna disabla den vid knapptryckning men jag vill inte det.

:-)

TravoniMedlem sedan okt. 20041 538 inlägg
#6

Tack gubbar. Funkar nu.

nitro2k01Medlem sedan aug. 20037 630 inlägg
#7

Travoni, l-boys kod fördröjer körningen av koden 3 sekunder, även om man bara klickar en gång. Är det så du vill ha det? Flytta ut den kod du vill köra utanför setTimeout för att lösa det. Sen kan koden så klart göras ännu mer avancerad så att om du klickar två gånger snabbt så kommer det vill göra först göras en gång på första klicket, och sedan tre sekunder senare.

Och för övrigt heter variabeln i l-boys kod enabled fast enabled = true betyder att knappen är avaktiverad. (Koden funkar lika bra för det, men jag föredrar personligen att variabelnamn är rättvisande.) Däremot får variabeln ett eget scope i hans kod, vilket är bra.

Genererad på 386 ms · cache AV · v20260730165559-full.f96bc7eb