我有这个 jQuery 代码:
$('#loadingDiv2')
.css('visibility','hidden') // hide it initially
.ajaxStart(function() {
$(this).css('visibility','visible');
$("#bbdata").empty();
})
.ajaxStop(function() {
$(this).css('visibility','hidden');// works here
setTimeout(function(){
$(this).css('visibility','hidden');// doesn't work here
}, 100);
});
为什么 $(this) 在 setTimeout 方法中不起作用?
最佳答案
它不起作用,因为this
此时是一个不同的上下文(window
),但你有一些选项,存储对你想要的内容的引用处理,像这样:
.ajaxStop(function() {
var $this = $(this);
setTimeout(function(){
$this.css('visibility','hidden');
}, 100);
});
或者使用$.proxy()
用于在该匿名函数中设置上下文,如下所示:
.ajaxStop(function() {
setTimeout($.proxy(function(){
$(this).css('visibility','hidden');
}, this), 100);
});
在第一个解决方案中,我们存储对要处理的内容的引用,在第二个解决方案中,我们实际上设置 this
是该函数运行的时间...否则它将是 窗口
。
关于jQuery 为什么 $(this) 在 setTimeout 方法中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3913090/