我有这个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方法中不起作用?
答案 0 :(得分:3)
它不起作用,因为this
在那一点上是一个不同的上下文(window
),你有几个optons,存储对你想要处理的内容的引用,如下所示:
.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
当该函数运行时...否则它将是{{1} }。
答案 1 :(得分:0)
this
中的setTimout
存在问题,the docs已明确说明。
但这并不重要,你可以随时使用var that = this;
技巧。
答案 2 :(得分:0)
setTimeout
在全局上下文中运行,其中this
指向窗口对象。
尝试存储对此的引用:
.ajaxStop(function() {
var me = this;
setTimeout(function(){
$(me).css('visibility','hidden');
}, 100);
});