gpt4 book ai didi

javascript - Jquery - 超时函数

转载 作者:行者123 更新时间:2023-12-03 07:13:28 24 4
gpt4 key购买 nike

我正在尝试运行以下 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com