2012-02-06 113 views
0

我在我的頁面中有以下內容。簡單的JavaScript不工作 - jquery

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

我在Firebug alertMsg()沒有定義錯誤?

+0

你並不需要分配「T」如果你永遠不會使用它。 – 2012-02-06 21:12:34

回答

2

變化

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

var t=setTimeout(alertMsg,3000); 

查看來自Mozilla開發者網絡的setTimeout文檔。使用字符串與使用eval相同,並且eval is bad!

+0

爲什麼'setTheTimeout'在通過引用傳遞時訪問'alertMsg',但是當通過一個eval'd字符串傳遞時不能通過'setTheTimeout'訪問'alertMsg'? – 2012-02-06 21:15:42

+0

@idiqual它不能,它是一個範圍問題,因爲bfavaretto說(http://stackoverflow.com/a/9167330/219743)。我只是不會推薦使用字符串作爲參數,因爲我不推薦使用eval。 – Gazler 2012-02-06 21:17:22

+0

,因爲你正在執行引用,並且eval總是不好的......假裝它不存在是最好的方法! – Relic 2012-02-06 21:22:40

2

該函數僅存在於document.ready回調的範圍內。試試這個:

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

    setTheTimeout(); 
}); 

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

範圍在這種情況下不是問題,您的答案不會解決他的問題。 – Relic 2012-02-06 21:26:11

+0

@Relic,我認爲scope *是這裏的問題。我的答案確實有用,並且非常接近他的原始代碼。現在,這並不意味着我提倡'eval'。我只是不確定這是否適合討論這個問題。 – bfavaretto 2012-02-06 21:44:39

+0

不...不...抱歉:http://jsfiddle.net/DztCG/ eval或不。 – Relic 2012-02-06 22:03:23

0

以引號和括號關閉調用ALERTMSG(jsFiddle)。

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

感謝您的幫助。 – james 2012-02-06 22:52:36

0

工作例如:http://jsbin.com/imovuk/edit#javascript,html

用下面的辦法。

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

評估和演示是邪惡

+0

感謝您的幫助。 – james 2012-02-06 22:52:26

0

它的定義稍有不同超出你的想象......試試這個,並回電:

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

感謝您的幫助。 – james 2012-02-06 22:52:17

+0

絕不是問題! – Relic 2012-02-06 23:42:37