出于某种原因,我无法在javascript超时后更改HTML。这是我正在使用的代码:
setTimeout("$(\"#display p\").html(newDescription);", 250);
这有什么问题吗?如果我删除超时,脚本可以正常工作。这是那个版本:
$("#display p").html(newDescription);
我正在运行Chrome 22,如果这有任何区别
答案 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);