2013-11-24 13 views
9

Tıklatıldığında her zaman bir liste öğesi için aktif bir sınıfı kaldırmaya ve ayarlamaya çalışıyorum. Şu anda seçilen aktif sınıfı kaldırıyor ancak ayarlamıyor. Ne eksik olduğum hakkında bir fikrin var mı?jquery ile ul listesi için aktif sınıf ekle/kaldır?

HTML

<ul class="nav nav-list"> 
    <li class='nav-header'>Test</li> 
    <li class="active"><a href="page1.php">Page 1</a></li> 
    <li><a href="page2.php">Page 2</a></li> 
    <li><a href="page3.php">Page 3</li> 
</ul> 

jQuery:

$('.nav-list').click(function() { 

    //console.log("Clicked"); 
    $('.nav-list li.active').removeClass('active'); 
    $(this).addClass('active'); 
}); 
+1

Sadece bir düşünün, ancak aktif sınıfı listenin içindeki liste nesnesine değil, gerçek listeye eklediğinizden olabilir mi? .nav-list li'den kaldırırsınız, ancak .nav listesine ekle – Chikilah

+0

, eğer "$ (this)" kaydını yaparsanız, etkinliğinizin listenin kendisi olduğunu görürsünüz. hile yaptı –

cevap

26

this.nav-list tarafından seçilen <ul> işaret eder. Bunun yerine temsilci kullanabilirsiniz!

$('.nav-list').on('click', 'li', function() { 
    $('.nav-list li.active').removeClass('active'); 
    $(this).addClass('active'); 
}); 
+1

Benim için çalışıyor – Nothing

5

UL elemanı değil Li için bağlamda, $(this) olacak noktaları

$('.nav-list li').click(function() { 

    $('.nav-list li.active').removeClass('active'); 
    $(this).addClass('active'); 
}); 

bu deneyin. Bu nedenle beklenen sonuçları almıyorsunuz.

+2

altında @minitech tarafından desrcibed olarak olay $ $ '('. nav-list li ') 'veya daha iyi bir olay delegasyonu listelenmesi gerekir ... teşekkürler! – Paul

+0

@Paul Daima yardımcı olmaktan mutluluk duyarız. –

10

Eğer kardeşin ve removeClass yöntemi

$('.nav-link li').click(function() { 
    $(this).addClass('active').siblings().removeClass('active'); 
}); 
+0

Bunun neredeyse bir yaşında olduğunu biliyorum, ama bu çözüm benim için çalıştı! – Michael

1

kullanabilirsiniz bunu kullandım:

$('.nav-list li.active').removeClass('active'); 
$(this).parent().addClass('active'); 

aktif sınıf <li> eleman ve ne olduğundan tıklandığında <a> öğesinde, ilk satır .active tüm <li>'dan kaldırır ve ikincisi (yine, $(this), tıklanan öğe olan <a>'u temsil eder) .active, <li> olan doğrudan ana öğeye ekler.

İlgili konular