javascript - Jquery - 超时函数

标签 javascript jquery html

我正在尝试运行以下 jQuery 代码。

$('body.player').find('.tab').click(function(){
      $('.playerLoaders').addClass('loading');

      setTimeout(function() {
            if( !$(this).hasClass('active') ){
                 $('.playerLoaders').removeClass('loading');
                 $('.tab-content[data-tab="' + $(this).attr('data-tab') + '"]').addClass('active').siblings().removeClass('active');
                 $(this).addClass('active').siblings().removeClass('active');
            }
            return false;
      },5000);
});

但是有些东西不太正常。
div 标签“playerLoaders”工作正常,但 tab-content-div 没有删除事件类,并将其添加到事件选项卡。

如果我删除超时功能,选项卡就可以正常工作。

我做错了什么?

最佳答案

在 setTimeout 函数内部,“this”引用的是 setTimeout 上下文,而不是外部函数上下文。您应该获得对外部函数上下文的引用。考虑一下:

$('body.player').find('.tab').click(function(){
      var self = this;
      $('.playerLoaders').addClass('loading');

      setTimeout(function() {
            if( !$(self).hasClass('active') ){
                 $('.playerLoaders').removeClass('loading');
                 $('.tab-content[data-tab="' + $(self).attr('data-tab') + '"]').addClass('active').siblings().removeClass('active');
                 $(self).addClass('active').siblings().removeClass('active');
            }
            return false;
      },5000);
});

如果你想在setTimeout函数中继续使用'this',你也可以这样绑定(bind)它:

setTimeout((function() {
            if( !$(this).hasClass('active') ){
                 $('.playerLoaders').removeClass('loading');
                 $('.tab-content[data-tab="' + $(this).attr('data-tab') + '"]').addClass('active').siblings().removeClass('active');
                 $(this).addClass('active').siblings().removeClass('active');
            }
            return false;
}).bind(this),5000);

关于javascript - Jquery - 超时函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36523441/

相关文章:

javascript - 根据字符输入的宽度增长文本框

javascript - 在angularjs指令链接函数中更改元素类

javascript - 具有后台页面的 Chrome 扩展程序不适用于 list 版本 2

javascript - 如何返回到具有 'read more' 按钮的页面上的相同位置而无需重新单击 'read more' 。

javascript - 使用javascript检测文本区域中的选定文本

Javascript/Jquery 日期选择器

javascript - 随机生成的颜色并将它们保存在 CSS 中

jquery - 使用 jQuery 为 div 制作动画并设置限制

javascript - jQuery 在之后停止工作

c# - 通过 MVC3 提供音频文件的问题 |使用各种 HTML5 播放器