Tunda Panggilan Multi Fungsi menggunakan Label
Ini adalah solusi yang saya kerjakan. Ini akan menunda eksekusi pada fungsi APAPUN yang Anda inginkan . Ini bisa berupa permintaan pencarian keydown, mungkin klik cepat pada tombol sebelumnya atau berikutnya (yang sebaliknya akan mengirim beberapa permintaan jika diklik dengan cepat terus menerus, dan tidak digunakan sama sekali). Ini menggunakan objek global yang menyimpan setiap waktu eksekusi, dan membandingkannya dengan permintaan terbaru.
Jadi hasilnya adalah hanya klik / tindakan terakhir yang akan dipanggil, karena permintaan tersebut disimpan dalam antrian, setelah X milidetik dipanggil jika tidak ada permintaan lain dengan label yang sama ada di antrian!
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);
}
Anda dapat mengatur waktu tunda Anda sendiri (opsional, default ke 500 ms). Dan kirim argumen fungsi Anda dalam "mode penutupan".
Misalnya jika Anda ingin memanggil fungsi di bawah ini:
function send_ajax(id){console.log(id);}
Untuk mencegah beberapa permintaan send_ajax, Anda menunda menggunakan:
delay_method( "check date", function(){ send_ajax(2); } ,600);
Setiap permintaan yang menggunakan label "tanggal cek" hanya akan dipicu jika tidak ada permintaan lain yang dibuat dalam jangka waktu 600 milidetik. Argumen ini opsional
Label independensi (memanggil fungsi target yang sama) tetapi jalankan keduanya:
delay_method("check date parallel", function(){send_ajax(2);});
delay_method("check date", function(){send_ajax(2);});
Hasilnya memanggil fungsi yang sama tetapi menunda mereka secara independen karena label mereka berbeda