2016-01-19 5 views
-2

я имею функцию focusout, что я хочу, чтобы выполнить через 5 секунд:Выполнение focusout-функции после Х секунд

setTimeout(function() { 
    $('#info_container').delegate('input[type="text"]', 'focusout', function() { 
      console.log("Hello"); 
}, 5000); 

Но это не работает. Hello Печатается сразу, а не через 5 секунд. Может кто-нибудь мне помочь.

ответ

4

Что вы сделали, это не «когда событие фокуса происходит, подождите 5 секунд и запустите функцию« но », подождите пять секунд и привяжите функцию к событию focusout.

Вы должны переместить тайм-аут в теле функции:

$('#info_container').delegate('input[type="text"]', 'focusout', function() { 
    setTimeout(function() { 
     console.log("Hello"); 
    }, 5000); 
}; 
+1

Просто быть в курсе контекста внутри SetTimeout обратного вызова, 'this' будет ссылаться на глобальный объект (окно в браузере), не сфокусирован из элемента, используя 'bind()' исправляет его, если необходимо: 'setTimeout (function() { console.log (this); } .bind (this), 5000);' –

+0

@MartinSchneider: Спасибо u! Почему моя версия не работала? – Bryan

+0

@Bryan. Ваша логика была неправильной, вы были ** обязательным ** событием фокуса через 5 секунд –

Смежные вопросы