超时后无法更改HTML

时间:2012-10-17 22:16:04

标签: javascript jquery

出于某种原因,我无法在javascript超时后更改HTML。这是我正在使用的代码:

setTimeout("$(\"#display p\").html(newDescription);", 250);

这有什么问题吗?如果我删除超时,脚本可以正常工作。这是那个版本:

$("#display p").html(newDescription);

我正在运行Chrome 22,如果这有任何区别

2 个答案:

答案 0 :(得分:5)

是的,第一个参数应该是函数。

var newDescription = 'The Description';
setTimeout(function(){
  $("#display p").html(newDescription);
}, 250);

OR

var newDescription = 'The Description',
    myfunc = function(){
       $("#display p").html(newDescription);
    };

setTimeout(myFunc, 250);

此外,newDescription必须位于您的函数可访问的范围内。

答案 1 :(得分:2)

将字符串传递给setTimeout时,代码将在全局范围中进行评估。更有可能的是,newDescription本地变量,因此在250毫秒超时后评估代码时不可用。

您不应该将字符串传递给setTimeout(),原因与您不应使用eval()相同。通过传递函数,您可以保留范围变量并获得更好的性能,因为JavaScript引擎可以优化您的函数(而不可能在字符串参数中优化代码)。

var newDescription = "My fancy new description";
setTimeout(function(){
    $("#display p").html(newDescription);
}, 250);