在像
这样的请求之后我有一个jquery变量 type: 'POST',
data: data,
cache: false,
success: function (data) {
var json = jQuery.parseJSON(data);
我正在尝试使用超时在五秒后触发下面的功能。
$("#a" + json.id).fadeOut(300);
目前我正在做
setTimeout('$("#a" + json.id).fadeOut(300)', 500);
但它似乎无法正常工作
答案 0 :(得分:3)
setTimeout
将函数和数字作为参数,请尝试:
setTimeout(function() {
$("#a" + json.id).fadeOut(300);
}, 500);
答案 1 :(得分:0)
不确定json.id的值是否在调用超时回调时发生变化。
考虑以下示例:
for (var i=0;i<10;i++){
setTimeout(function(){console.log(i)},500);
}
回调函数看到i = 10,因为这是调用函数时i的值。您可以使用闭包进行预绑定:
var f=function(id){
setTimeout(function(){console.log(id);},500);
}
for (var i=0;i<10;i++) f(i);
既然您已经了解了封闭和预绑定的工作方式,那么这是您问题的更强大的解决方案:
var f=function(id){
setTimeout(function(){$('#a'+id).fadeOut(300);},500);
}
f(json.id);
答案 2 :(得分:0)
您的代码不起作用,因为String在全局上下文中被评估。因此,为了使它工作,您可以使json全局(删除var)。
此外,虽然我不确定你从哪里调用setTimeout
,但假设它在回调中,你可以选择将id作为字符串的一部分:
setTimeout('$("#a'+json.id+'").fadeOut(300)', 500);
但当然更好的选择是不惜一切代价避免使用eval和全局变量(checkout Eval is evil和Why global state is the devil进行精心设计的解释)并传递一个闭包:
setTimeout(function(){ $("#a" + json.id).fadeOut(300); }, 500);