我不知道为什么但这段代码不起作用?为什么不呢?我想这是因为我在这里有范围问题:
function washAway(obj) {
alert($(obj)); // says HTML Object which is fine
setTimeout(function() {
alert($(obj)); // says undefined
$(obj).fadeOut("slow", function() {
$(this).remove();
});
}, 2000);
};
答案 0 :(得分:3)
在超时函数执行时,它无法知道obj
是什么 - 它是传递给设置超时的方法的参数,但是里面的函数没有引用它。
另一种方法是编写一个jQuery插件,等待它的行为如下:
function($){ //to protect $ from noConflict()
$.fn.pause = function(duration) {
$(this).animate({ dummy: 1 }, duration);
return this;
};
}
然后你可以使用:
$(obj).pause(2000).fadeOut("slow", function() { $(this).remove(); });
答案 1 :(得分:1)
无论如何,经过几次尝试/错误,我找到了答案。但我仍然想知道为什么它没有成功。
以下是代码:
function washAway(obj) {
alert($(obj).attr("id"));
var a = function() {
var _obj = obj;
return function() {
$(_obj).fadeOut("slow", function() {
$(this).remove();
});
};
};
setTimeout(a(), 2000);
};
编辑:我想我在这里理解了这个问题:
因为我们在这里讨论闭包,所以当washAway执行完成时,变量obj被破坏,因此setTimeOut函数回调函数不能使用该资源,因为它在堆栈上不再可用,并且它也不是全局变量。