2012-02-06 67 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