Ankündigung

Einklappen
Keine Ankündigung bisher.

Funktion bei Doppelklick nicht ausführen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Funktion bei Doppelklick nicht ausführen

    Guten Morgen !

    ich habe folgenden Code Part:

    Code:
    <div onclick="nextStep()">Klick mich</div>
    
    function nextStep() {
        console.log("TEST")
    }
    Klappt auch. Allerdings ist mir aufgefallen, dass wenn ich einen Doppelklick auf "klick mich" mache, dass die Funktion auch 2x hintereinander ausgeführt wird - verständlich.
    Frage ist: Wie kann ich dies unterbinden ? Die Funktion darf nur auf einen "Klick" reagieren, nicht auf einen Doppelklick.

  • #2
    Entferne den Event Listener beim ersten Klick:

    Code:
    <button type="button">Klick mich</button>
    
    <pre id="log"></pre>
    Code:
    const button = document.querySelector('button');
    
    const clickListener = (event) => {
        event.preventDefault();
        document.querySelector('#log').textContent += 'Klick\n';
        button.removeEventListener('click', clickListener);
    };
    
    button.addEventListener('click', clickListener);
    Demo: https://jsfiddle.net/c0dem0nkey/0wgy143a/

    Kommentar


    • #3
      das wäre glaub ich nicht richtig.
      Der Button soll ruhig mehrfach gedrückt werden können, aber nicht via Doppelklick

      Kommentar


      • #4
        Zitat von Ghost109 Beitrag anzeigen
        das wäre glaub ich nicht richtig.
        Der Button soll ruhig mehrfach gedrückt werden können, aber nicht via Doppelklick
        Ein Doppelklick sind nun mal zwei Klicks. Du müsstest den zweiten Klick ignorieren, wenn er in einem bestimmten Zeitraum stattfindet. Ich persönlich würde das mit einem debounceTime-Operator in einem rxjs-Observable lösen:

        https://rxjs.dev/api/operators/debounceTime

        Das ist recht praktisch, wenn man mal die Grundlagen von rxjs verstanden hat. Ansonsten muss man das halt selber nachprogrammieren. Oder man setzt einfach den Button für einen kurzen Zeitraum auf disabled:

        Code:
        const button = document.querySelector('button');
        
        const clickListener = (event) => {
            event.preventDefault();
        
            document.querySelector('#log').textContent += 'Klick\n';
        
            button.disabled = true;
            setTimeout(() => {
                button.disabled = false;
            }, 500);
        };
        
        button.addEventListener('click', clickListener);
        Demo: https://jsfiddle.net/c0dem0nkey/0wgy143a/1/

        Kommentar


        • #5
          Das mit dem auf "disabled" setzen ist keine schlechte Idee !
          Danke

          Kommentar


          • #6
            https://css-tricks.com/snippets/jque...ce-and-unbind/
            Die Funktion darf nur auf einen "Klick" reagieren, nicht auf einen Doppelklick.

            Kommentar

            Lädt...
            X