setTimeout не работает, я что-то здесь упускаю? - PullRequest
0 голосов
/ 12 октября 2009

Я знаю, что это довольно просто, но я просто не могу заставить его работать. он продолжает выдавать ошибку «объект ожидается» ...

 $(document).ready(function(){   
    setTimeout('showMessage()', 1000); 

    function showMessage() { 
        alert('abc');
    } 
    });

Ответы [ 4 ]

8 голосов
/ 12 октября 2009

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

Используйте функцию непосредственно в качестве аргумента для setTimeout() и избавьтесь от злой оценки строки [TM]:

setTimeout(showMessage, 1000); 
6 голосов
/ 12 октября 2009

Метод setTimeout лучше всего использовать с функцией, а не с строкой. Поэтому лучший способ сделать это будет выглядеть так:

$(document).ready(function() {
    setTimeout(showMessage, 1000);
});

function showMessage() { 
    alert('abc');
}
1 голос
/ 12 октября 2009

Проблема в том, что функция showMessage объявлена ​​в событии ready, и setTimeout ("showMessage ()", 1000) будет искать ее в глобальной области видимости. Вы можете переместить его объявление в глобальную область, например, из состояния готовности или используйте ответ SLaks: setTimeout (showMessage, 1000)

0 голосов
/ 12 октября 2009

Вы обернули свою функцию в кавычки, поэтому она обрабатывает ее как строку, а не как ожидаемый объект, поэтому, как сказал SLaks:

 $(document).ready(function(){   
    setTimeout(showMessage, 1000); 

    function showMessage() { 
        alert('abc');
    } 
    });
...