2016-01-14 3 views
1

У меня есть страница, где я запускаю функцию, как только dom готов к загрузке страницы. Затем я хочу вызвать его снова, когда пользователь нажимает на ссылку, однако для этого второго раза он запускается, я хочу, чтобы он приостановился на несколько секунд.Установить таймаут не работает во время запуска триггера прослушивателя событий

Я пробовал следующее, и функция запускается, но тайм-аут нет.

function changeRestrictionTime(time) { 
    // DO STUFF 
} 

require(["dojo/domReady!"], function(){ 
    changeRestrictionTime('12:00 pm'); 
    var next7 = document.getElementById('next-7days'); 
    next7.addEventListener('click', function() { 
     setTimeout(changeRestrictionTime('12:00 pm'), 5000); 
    }, false); 
}); 

Пожалуйста, дайте мне знать, в чем проблема.

Обратите внимание: хотя я использую функцию dojo для domReady, я действительно не знаю ни одного додзе, поэтому предпочитаю придерживаться ванильного JS. У меня нет доступа к другим библиотекам. я также не имею доступ к разметке или функции запроса AJAX

+0

Вы не передаете ссылку на функцию 'setTimeout', но, скорее всего,' undefined' – zerkms

ответ

4

Вам необходимо передать ссылку на функцию:

setTimeout(function() {changeRestrictionTime('12:00 pm')}, 5000); 

Вы выполнявшая функцию сразу и передавая ее возвращаемое значение.

+0

Спасибо! Это сработало. У меня все еще нет головы вокруг концепции, хотя, если вы можете указать мне в правильном направлении, чтобы узнать больше, я был бы признателен. – dust

+1

@ dust - Это довольно просто. Если вы используете '()' после имени функции, что означает выполнить его прямо сейчас. Если вы используете только имя функции или анонимную функцию с помощью '()', это похоже на передачу указателя на функцию. При передаче функции в качестве аргумента любой другой функции вы всегда хотите просто имя. Таким образом, в этом случае я создал новую анонимную функцию, которая может быть переданной, а затем, когда она вызывается, может вызвать вашу фактическую функцию с требуемыми параметрами. – jfriend00

+0

Хорошо, спасибо за объяснение! – dust

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