Ritardare le chiamate multifunzione utilizzando le etichette
Questa è la soluzione con cui lavoro. Ritarderà l'esecuzione su QUALSIASI funzione desiderata . Può essere la query di ricerca del keydown, forse il clic rapido sui pulsanti precedenti o successivi (che altrimenti invierebbe una richiesta multipla se si fa clic rapidamente in modo continuo e non venga utilizzato dopo tutto). Questo utilizza un oggetto globale che memorizza ogni tempo di esecuzione e lo confronta con la richiesta più recente.
Quindi il risultato è che solo l'ultimo clic / azione verrà effettivamente chiamato, poiché quelle richieste sono memorizzate in una coda, che dopo X millisecondi viene chiamato se nella coda non esistono altre richieste con la stessa etichetta!
function delay_method(label,callback,time){
if(typeof window.delayed_methods=="undefined"){window.delayed_methods={};}
delayed_methods[label]=Date.now();
var t=delayed_methods[label];
setTimeout(function(){ if(delayed_methods[label]!=t){return;}else{ delayed_methods[label]=""; callback();}}, time||500);
}
È possibile impostare il proprio tempo di ritardo (facoltativo, il valore predefinito è 500 ms). E invia i tuoi argomenti di funzione in un "modo di chiusura".
Ad esempio, se si desidera chiamare la seguente funzione:
function send_ajax(id){console.log(id);}
Per impedire più richieste send_ajax, puoi ritardarle usando:
delay_method( "check date", function(){ send_ajax(2); } ,600);
Ogni richiesta che utilizza l'etichetta "Controlla data" verrà attivata solo se non viene effettuata alcuna richiesta nel periodo di 600 millisecondi. Questo argomento è facoltativo
Indipendenza dall'etichetta (chiamando la stessa funzione target) ma esegui entrambi:
delay_method("check date parallel", function(){send_ajax(2);});
delay_method("check date", function(){send_ajax(2);});
Risultati nel chiamare la stessa funzione ma ritardarli indipendentemente perché le loro etichette sono diverse