2016-04-09 28 views
0

Aşağıdaki jQuery Kodunu çalıştırmaya çalışıyorum.Jquery - TimeOut İşlevi

$('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); 
}); 

Fakat bir şey gayet doğru çalışmıyor.
"playerLoaders" div etiketi mükemmel çalışıyor, ancak tab-content-div etkin sınıfı kaldırmıyor ve etkin sekmeye ekliyor.

TimeOut işlevini silersem, sekmeler gayet iyi çalışıyor.

Neyi yanlış yapıyorum?

+0

Eğer şeyleri değiştirmek olmadığını görmek için 5 saniye bekliyor musunuz? '.playLoaders' tıklatmada değişecek ... diğer her şey 5 saniye bekler, sonra çalışır * IF * '.active' sınıfına sahip değildir. – Scott

+0

zaman aşımı işlevini, – Dmitri

+0

ifadesinden sonra, tam olarak ne yapmaya çalışıyorsunuz? – user151496

cevap

1

setTimeout işlevinin içinde, 'this' setTimeout bağlamına başvuruyor ve dış işlev bağlamını değil. Dış fonksiyon bağlamına bir referans almalısınız. Şunu bir düşünün:

$('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); 
}); 

Kullanmaya devam etmek istiyorsanız, 'Bu' setTimeout işlevi içinde, ayrıca bu gibi bağlayabilir:

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); 
+0

Merhaba carlosdubusm Giriş için teşekkürler. Sorun şu ki, tıkladığımda .playerLoaders, yükleme sınıfını ekledi, ancak başka bir şey olmuyor. TimeOut işlevi etkin değil mi? – Grillo

+0

'Bu' yerine 'kendini' kullanmayı denediniz mi? Konuyla bir jsfiddle gönderebilir misiniz? – carlosdubusm

+0

Tekrar merhaba @carlosdubusm Aslında çalışıyordu, bir "." Vardı. Bir yerde olmamalı - bunun için üzgünüm! – Grillo