2017-02-21 1 views
0

Ich möchte bestimmten Code auslösen, wenn Benutzer eine Menge in einem Eingabefeld ändern. aber wenn Benutzer den kleinen Auf- und Abwärtspfeil verwenden, um die Menge schnell zu erhöhen und zu verringern. Drücken Sie die Taste 5 Mal, um zu 5 zu gelangen. Ich möchte nicht, dass der Code fünf Mal ausgelöst wird. Also ich möchte einen Timer einstellen. Wenn ein Änderungsereignis erkannt wird, wartet es 1 Sekunde oder wartet, bis die Einschaltänderung beendet ist. Dann schnappen Sie sich den neuesten Wert.jquery onchange set timeout

So gibt es eine Möglichkeit, mehrere Änderungen in kurzer Zeit und nichts zu erkennen. Dann, wenn die Änderung passiert und keine Änderung mehr passieren nach x von Zeit zu Zeit. etwas tun.

$("#quantity").on('change',function(){ 
    setTimeout(function(){ 
     console.log("fired"); 
    }, 1000); 
}); 

Mein Code verzögert nur die gefeuert.

Wie können wir das erreichen?

gefunden duplizierte Frage mit Antwort hier Jquery change with delay

+0

NVM Jungs gefunden doppelte Frage mit der Antwort hier http://StackOverflow.com/Questions/9424752/JQuery-change-with-delay – codenoob

+0

Sorry, habe Ihren Kommentar erst nach dem Posten meiner Antwort. Vielleicht hilft es trotzdem ... – rasmeister

Antwort

2

Hier ist, was ich auf Eingabefelder getan haben Auslösen häufige Änderungen zu verhindern, während Benutzer eingeben:

  var timeoutId = 0;  
     object.dom.input.addEventListener('input',function() { 
      clearTimeout(timeoutId); 
      // do stuff 
      // Fire our onchange event 
       if (this.delayOnChange > 0) { 
        timeoutId = setTimeout(function() { this.onchange() }, this.delayOnChange); 
       } else { 
        this.onchange(); 
       } 
      } 
     },false); 

Diese prüft, ob wir uns gesetzt haben ein 'delayOnchange', und wenn wir den Auslöser eines 'onchange()' Ereignisses verzögert haben. Wir setzen den Timer (clearTimeout()) jedes Mal zurück, wenn eine Änderung an der Eingabe vorgenommen wird, so dass wir im Grunde darauf warten, dass der Benutzer die schnelle Eingabe beendet, bevor er die Onchange auslöst.

+0

das klappt auch. Ich denke, dass Ihr Gerät besser für lange Schreibsituationen geeignet ist, da es den Timer ständig aktualisiert, solange der Benutzer tippt. Die Antwort der anderen Frage war, einfach eine Sekunde zu warten. Wird nach 10 Minuten akzeptiert – codenoob

+0

Eine Sekunde ist definitiv zu lange eine Verzögerung unabhängig. Ich finde, dass etwas über 1/2 Sekunde für den Benutzer unangenehm wird. Der Vorteil hierbei ist, dass Sie die Verzögerung je nach Situation unterschiedlich einstellen können. Wenn sie auf einen Pfeil nach oben/unten klicken, verkürzt sich die Zeit möglicherweise auf 300 ms. Natürlich hängt es auch davon ab, was das gefeuerte Ereignis bewirkt und wie sich dies auf die Benutzererfahrung auswirkt. – rasmeister