|
|
|
|
var tmr = null;
function checkLoginDelay(){
if(tmr != null) clearTimeout(tmr);
tmr=setTimeout(function() {checkLogin();},500);
}
|
как это работает?
изначально tmr равно null
tmr в функции делает задержку работы другой функции, чтоб за этот период функция не дергалась
без этого кода:
if(tmr != null) clearTimeout(tmr);
|
checkLogin() дергается столько раз за 500 милсек сколько раз его "трогали"
если добавить
if(tmr != null) clearTimeout(tmr);
|
то дергается только раз, но clearTimeout только лишь отменяет действие setTimeout!!!! | |
|
|
|
|
|
|
|
для: vadimka
(12.03.2013 в 20:28)
| | checkLoginDelay() выполняется по keyup, верно?
Вот, мы открыли страницу, и у нас сразу же var tmr = null, правильно?
Теперь мы нажали и отпустили клавишу в инпуте, запустив checkLoginDelay().
Так как tmr = null, то сразу же включается "секундомер" и через 500 мсек запустится ф-ция checkLogin(), а переменная tmr становится не равной null сразу же!
И тут, (не прошло еще и 500мсек!) мы нажимаем новую клавишу, чем обнуляем наш "секундомер" (clearTimeout(tmr)) и переменную tmr, запуская наш "секундомер" снова с нуля.
То есть, ф-ция checkLogin() запустится лишь спустя 500 мсек после последнего нажатия и отпуска клавиши. То есть, если после последнего события keyup прошло более 500 мсек.
А если интервал между нажатиями клавиш будет также больше заданных 500 мсек, то после каждого такого нажатия ф-ция checkLogin() будет выполняться каждый раз.
И еще проще: каждое последующее событие keyup, если оно произошло менее, чем через 500мсек от предыдущего, останавливает "секундомер" и тут же вновь запускает его, но уже с нуля, не давая запустить ф-цию checkLogin(). | |
|
|
|
|
|
|
|
для: Deed
(12.03.2013 в 23:15)
| | Спасибо! | |
|
|
|