jQuery 为什么 $(this) 在 setTimeout 方法中不起作用?

标签 jquery

我有这个 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/

相关文章:

javascript - 以触​​发任何更改处理程序的方式使用 jQuery 选择 <select> 选项

javascript - 过渡不适用于渐变填充

javascript - 点击功能不适用于下拉菜单(JavaScript)

javascript - 类在不同元素中使用(其他 jQuery 选择器不起作用)?

javascript - 如何从 php 变量为谷歌地图脚本提供经度和纬度值

c# - 反序列化 jQuery 序列化表单

javascript - 在我的案例中如何本地化一个简单的 HTML 网站页面?

javascript - jquery 为新创建的元素委托(delegate) onload 事件处理程序

javascript - 如何在 iframe 或 lightbox 中查看 google drive 文档链接

jquery - 滑出菜单侧边栏