Atraso em chamadas multifuncionais usando etiquetas
Esta é a solução com a qual trabalho. Isso atrasará a execução em QUALQUER função que você desejar . Pode ser a consulta de pesquisa de teclas pressionadas, talvez o clique rápido nos botões anterior ou próximo (que de outra forma enviariam várias solicitações se clicassem rapidamente continuamente e não fossem utilizados, afinal). Isso usa um objeto global que armazena cada tempo de execução e o compara com a solicitação mais atual.
Portanto, o resultado é que apenas o último clique / ação será chamado, porque essas solicitações são armazenadas em uma fila, que após o milissegundo X é chamado, se não houver outra solicitação com o mesmo rótulo na fila!
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);
}
Você pode definir o seu próprio tempo de atraso (opcional, o padrão é 500ms). E envie os argumentos da sua função de uma "maneira de fechamento".
Por exemplo, se você deseja chamar a função abaixo:
function send_ajax(id){console.log(id);}
Para impedir várias solicitações send_ajax, você as adia usando:
delay_method( "check date", function(){ send_ajax(2); } ,600);
Qualquer solicitação que use o rótulo "data de verificação" será acionada apenas se nenhuma outra solicitação for feita no período de 600 milissegundos. Este argumento é opcional
Independência de rótulo (chamando a mesma função de destino), mas execute os dois:
delay_method("check date parallel", function(){send_ajax(2);});
delay_method("check date", function(){send_ajax(2);});
Resulta em chamar a mesma função, mas atrasa-as de forma independente, porque seus rótulos são diferentes