Ho una casella di controllo che può attivare un determinato comportamento, tuttavia se qualcuno fa 100 clic consecutivi non voglio inviare 100 richieste al mio server.Come debellare correttamente le richieste Ajax
Questo è quello che ho ottenuto in atto finora (trovato questo frammento di codice):
deBouncer = function($,cf,of, interval){
var debounce = function (func, threshold, execAsap) {
var timeout;
return function debounced() {
var obj = this, args = arguments;
function delayed() {
if (!execAsap)
func.apply(obj, args);
timeout = null;
}
if (timeout)
clearTimeout(timeout);
else if (execAsap)
func.apply(obj, args);
timeout = setTimeout(delayed, threshold || interval);
}
}
jQuery.fn[cf] = function(fn){ return fn ? this.bind(of, debounce(fn)) : this.trigger(cf); };
};
Nel mio documento funzione pronta:
deBouncer(jQuery,'smartoggle', 'click', 1500);
Poi l'evento stesso:
$(window).smartoggle(function(e){
MyToggleFunction();
});
Funziona come ho messo 1500 ms per essere il periodo di debouncing, quindi se si fa clic su n volte con 1500 ms verrà inviato solo t è l'ultimo stato del server.
C'è comunque un effetto collaterale sull'uso di questo, ora il mio evento di click per altre cose è incasinato. Sto facendo qualcosa di sbagliato qui? C'è un modo migliore per rimbalzare?
Sei decisamente sulla pista di scrittura qui .. Vorrei solo legare questo evento al segno di spunta in questione però. Ciò potrebbe consentire di semplificare alcune delle altre codifiche. –
@JeremyJStarcher puoi per favore dare un esempio di cosa intendi? –
Avrei bisogno di vedere il tuo markup ... o potrei darti un esempio inventato basato su come lo faccio. –