0

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

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

这有什么问题吗?如果我删除超时,脚本就可以完美运行。这是那个版本:

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

如果这有什么不同,我正在运行 Chrome 22

4

2 回答 2

5

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

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

或者

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

setTimeout(myFunc, 250);

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

于 2012-10-17T22:16:58.750 回答
2

将字符串传递给 setTimeout 时,将在全局范围内评估代码。很可能,newDescription是一个局部变量,因此在 250 毫秒超时后评估代码时不可用。

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

var newDescription = "My fancy new description";
setTimeout(function(){
    $("#display p").html(newDescription);
}, 250);
于 2012-10-17T22:20:46.853 回答