2012-02-06 3 views
0

У меня есть следующее на моей странице.Простой Javascript не работает - JQuery

$(document).ready(function() { 
    function setTheTimeout(){ 
     var t=setTimeout("alertMsg()",3000); 
    } 
    function alertMsg(){ 
     alert("Hello"); 
    } 
    setTheTimeout(); 
}); 

У меня ошибка в Firebug alertMsg() не определен?

+0

Вам не нужно назначать «Т» если вы никогда не собираетесь использовать его. –

ответ

2

Изменить

var t=setTimeout("alertMsg()",3000); 

Для

var t=setTimeout(alertMsg,3000); 

См setTimeout документацию от Mozilla Developer Network. Использование строки такое же, как с использованием eval, и eval is bad!

+0

Почему «setTheTimeout» доступен «alertMsg» при передаче по ссылке, но не при передаче через строку eval'd? –

+0

@idiqual Он не может, это проблема, как сказал бфаваретто (http://stackoverflow.com/a/9167330/219743). Я бы не рекомендовал использовать строку в качестве параметра по тем же причинам, которые я бы не рекомендовал eval. – Gazler

+0

, потому что вы выполняете ссылку, и eval всегда плох ... просто притворись, что он не существует, это лучший способ обойти его! – Relic

2

Эта функция существует только в области обработки обратного вызова document.ready. Попробуйте это:

$(document).ready(function() { 
    function setTheTimeout(){ 
     var t=setTimeout("alertMsg()",3000); 
    } 

    setTheTimeout(); 
}); 

function alertMsg(){ 
    alert("Hello"); 
} 
+0

Сфера не является проблемой в этом случае, ваш ответ не будет устранять его проблему. – Relic

+0

@Relic, я считаю, что область * есть * проблема здесь. Мой ответ действительно работает и очень близок к его оригинальному коду. Теперь это не значит, что я выступаю за 'eval'. Я просто не уверен, что это подходящее место для обсуждения этого. – bfavaretto

+0

нет ... это не ... извините: http://jsfiddle.net/DztCG/ eval или нет. – Relic

0

Возьмите кавычки и скобки от вызова alertMsg (jsFiddle).

function setTheTimeout(){ 
    var t=setTimeout(alertMsg,3000); 
} 
function alertMsg(){ 
    alert("Hello"); 
} 
setTheTimeout(); 
+0

Спасибо за помощь. – james

0

Рабочий пример: http://jsbin.com/imovuk/edit#javascript,html

Используйте следующий подход.

$(document).ready(function() { 
    function setTheTimeout(){ 
     var t=setTimeout(function() {alertMsg();},3000); 
    } 
    function alertMsg(){ 
     alert("Hello"); 
    } 
    setTheTimeout(); 
}); 

Eval зло

+0

Спасибо за помощь. – james

0

Это определяется несколько иначе, чем вы ожидали бы ... попробовать это, и перезвонить:

$(document).ready(function() { 
    function setTheTimeout(){ 
     var t=setTimeout(alertMsg,3000); 
    } 
    function alertMsg(){ 
     alert("Hello"); 
    } 
    setTheTimeout(); 
}); 
+0

Спасибо за помощь. – james

+0

никогда не проблема! – Relic

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