我有以下脚本:
$(function() {
$(".message").hide();
function simulate_ajax_call()
{
$.ajax({
url: "/echo/json/",
success: function(){
alert("done");
$(".message").empty().html("done");
$(".message").delay(1000).fadeOut(500);
}
});
}
$('.button').click(function() {
$(".message").fadeIn(500);
setTimeout("simulate_ajax_call()", 5000);
});
});
使用以下HTML:
<input type="button" value="button" class="button" />
<div class="message">loading...</div>
由于某种原因,setTimeout
部分无效。即在5000ms之后似乎没有调用该函数。
答案 0 :(得分:9)
您需要替换:
setTimeout("simulate_ajax_call()", 5000);
使用:
setTimeout(simulate_ajax_call, 5000);
您应该避免将()
放在函数名的末尾,否则 it gets called/run immediately :)
答案 1 :(得分:4)
You need to drop the quotes and the parenthesis
执行setTimeout("simulate_ajax_call()", 5000)
相当于eval()
自动运行该功能的代码。
答案 2 :(得分:1)
setTimeout
eval
是全局范围内的字符串参数,但simulate_ajax_call
是在嵌套范围内声明的,因此eval
无法找到它以便调用它。
正如其他两个答案指出解决问题的最佳方法是使用setTimeout
的函数传递版本,但要小心删除括号,因为你不想意外调用立即运作。
如果您在全局范围内声明simulate_ajax_call
,那么您的代码可能会有效。在这种情况下,括号本来是正确的,尽管setTimeout
的字符串版本一般来说仍然是个坏主意。