View Full Version : سوال: اجرای یک تابع پس از چند ثانیه
صادق صدقی
پنج شنبه 24 مرداد 1392, 12:58 عصر
سلام
وقت بخیر
ببخشید ممکنه یکم گنگ سوالم رو بپرسم
من یک کنترلی دارم مثلا یک اینپوت تکست می خوام توی رویداد KeyUp این یک فانکشن فراخونی بشه
منتهای امر به این صورت که بعد از اینکه کلیدی از صفحه کیبورد فشرده شد بعد از 2 ثانیه اون فانکشن فراخونی بشه
حالا اگه تا 2 ثانیه کلید دیگه ای فشرده شد تابع 2 ثانیه بعدش اجرا بشه و اون دفه قبلی یه اجرا نشه!!!
:لبخند:
مرسی
jalil_gh
پنج شنبه 24 مرداد 1392, 13:57 عصر
function myFunc() {
console.log('hi there!');
};
var timeout;
$('#txt').on('keyup', function () {
clearTimeout(timeout);
timeout = setTimeout(myFunc, 2000);
});
azamicu
پنج شنبه 24 مرداد 1392, 14:16 عصر
سلا دوست عزیز روش دوستمون درسته و اگه تابعی که میخوای بعدش فراخوانی بشه animate هستش با delay هم میتونی این کارو بکنی
صادق صدقی
پنج شنبه 24 مرداد 1392, 14:26 عصر
این کد اگر 2 بار کلید فشرده بشه 2 بار اجرا میشه
من می خوام فقط 1 بار اجرا بشه
البته اگه در طول کمتر از 2 ثانیه کلید ها زده شد
mehdi.mousavi
پنج شنبه 24 مرداد 1392, 14:32 عصر
سلام من یک کنترلی دارم مثلا یک اینپوت تکست می خوام توی رویداد KeyUp این یک فانکشن فراخونی بشه منتهای امر به این صورت که بعد از اینکه کلیدی از صفحه کیبورد فشرده شد بعد از 2 ثانیه اون فانکشن فراخونی بشه حالا اگه تا 2 ثانیه کلید دیگه ای فشرده شد تابع 2 ثانیه بعدش اجرا بشه و اون دفه قبلی یه اجرا نشه!!! مرسی
سلام.
پاسخی که آقای jalil دادن درسته، اما من جای شما باشم اون کارو نمی کنم. چون ممکنه بعدا، textbox دیگه ای داشته باشید که همین
امکان رو بخواهید در اون داشته باشید، یا تابعی داشته باشید که نرخ call کردن اون، بسته به شرایط متغیر باشه و ...
من استفاده از jQuery Throttle (http://benalman.com/projects/jquery-throttle-debounce-plugin/) رو پیشنهاد می کنم، بدین ترتیب میتونید با هر function ای این کارو انجام بدید. بعنوان نمونه برای اینکه
با استفاده از jQuery Throttle همین کارو انجام بدید، باید بدین شکل عمل کنید:
$('#txt').on('keyup', function () {
$.throttle(2000, function(){
//This is called at most once every 2 seconds.
});
});
اما اگر مایل نیستید از jQuery Throttle استفاده کنید، حداقل utility function جدیدی به jQuery اضافه کنید، که همه جا قادر باشید از
این امکان سود ببرید، چیزی شبیه bindWithDelay (https://github.com/bgrins/bindWithDelay/blob/master/bindWithDelay.js).
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.