Основной вопрос по JavaScript: через 5 секунд установите для переменной значение true - PullRequest
4 голосов
/ 16 ноября 2009

Я в основном пытаюсь сделать следующее. Я хочу, чтобы через 5 секунд после загрузки страницы она установила для переменной значение true.

Как только истина, он продолжит давать предупреждение "истина" .. на данный момент.

Если кто-то попытается нажать кнопку раньше, чем через 5 секунд, он выдаст ложное предупреждение.

Вот что мне удалось набрать. Точно не работает. Спасибо:)

http://pastebin.com/m799d3957

Ответы [ 2 ]

9 голосов
/ 16 ноября 2009

У вас правильная идея, но у вас есть небольшая проблема с переменной областью действия. Чтобы уменьшить головную боль, лучше всего избегать использования опции строки eval на setTimeout (которая, как я знаю, показана в руководствах по всему Интернету) и использовать анонимную функцию:

var link;
function loading(){
    setTimeout(function(){ 
        link = true; 
    }, 5000);
}

Таким образом, вы будете точно знать, где объявлено link, а область видимости кристально чиста.

9 голосов
/ 16 ноября 2009

Попробуйте это:

setTimeout(function() { window.link = true; }, 5000);

Это установит глобальную переменную "link" в true через 5 секунд, что удовлетворит ваш оператор if.

Редактировать Это может быть немного сложно, если вы новичок, но лучший способ сделать это - использовать область видимости функции, а не глобальную область видимости.

В вашем случае объявите функцию таймера следующим образом:

var timer = (function () {
    var link = false;
    setTimeout(function() { link = true; }, 5000);

    return function() {
        alert(link);
    };
}());

Таким образом, анонимная функция возвращает другую функцию, которая становится timer (), но таким образом, таймер имеет доступ к своей «закрытой» переменной ссылки. Для получения дополнительной информации, прочитайте статью Mozilla о области видимости переменных JavaScript

...