Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Объясните, пожалуйста, принцип работы скрипта
 
 автор: vadimka   (12.03.2013 в 20:28)   письмо автору
 
 


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!!!!

  Ответить  
 
 автор: Deed   (12.03.2013 в 23:15)   письмо автору
 
   для: 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().

  Ответить  
 
 автор: vadimka   (13.03.2013 в 14:25)   письмо автору
 
   для: Deed   (12.03.2013 в 23:15)
 

Спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования