2014-10-31 53 views
0

所以在嘗試各種方法(如if語句和刪除類)之後,我終於放棄了。我不能想到一個優雅的解決方案來修復我的代碼。Jquery點擊事件(用於列表項)堆棧

當我點擊不同的列表項目時,事件不會重置。相反,它以某種方式積累。這裏發生了什麼?

$(document).ready(function() { 
$(".home").click(function() { 
$(this).toggleClass("item-active"); 
$(".block-1").toggleClass("blocks"); 
$(".b1").toggleClass("blockss"); 
    $(".content").toggleClass("content-removed"); 
}); 
$(".products").click(function() { 
$(this).toggleClass("item-active"); 
$(".block-2").toggleClass("blocks"); 
$(".b2").toggleClass("blockss"); 
    $(".content").toggleClass("content-removed"); 
});}); 

http://jsfiddle.net/bk38w/87/

我做了一個的jsfiddle和複製的代碼存在。你可以在那裏看到問題。

我將不勝感激洞察力。

+0

什麼問題呢?什麼需要發生? – 2014-10-31 16:50:10

+0

是否有理由不選擇所有菜單項的一個功能?只需檢查 – 2014-10-31 16:55:04

+0

@BojanPetkovski如果您點擊首頁,並且該產品處於活動狀態,則兩個產品都處於活動狀態。我希望以前的項目重置爲默認狀態。 – Steve 2014-10-31 16:57:12

回答

0

我清理了您的代碼,只使用一種方法,而不是爲每個菜單分別設置類。清潔劑htmlcssjs,也使用較少的類。

說到CSS,你應該考慮下面這個。它曾經是.blockss,現在你只需要改變的.b1項目的CSS,如果他們的父母有.blocks

DEMO

希望這有助於和你明白它在做什麼。其實你可以甚至清理你的HTML多一點,即你可以刪除<div class="b1">,並設置在<a>.b1類,並使其display: block;但這只是如果你真的想清理:)

.blocks .b1 { 
    display:inline-block; 
} 

HTML

<nav> 
    <ul> 
     <li> <a href="#" class="trigger" data-id="home">Home</a> 
     </li> 
     <li> <a href="#" class="trigger" data-id="products">Products</a> 
     </li> 
    </ul> 
    <div data-sub-id="home" class="block"> 
     <div class="b1"><a href="#">Link 1</a> 
     </div> 
     <div class="b1"><a href="#">Link 2</a> 
     </div> 
     <div class="b1"><a href="#">Link 3</a> 
     </div> 
    </div> 
    <div data-sub-id="products" class="block"> 
     <div class="b1"><a href="#">Link 1</a> 
     </div> 
     <div class="b1"><a href="#">Link 2</a> 
     </div> 
     <div class="b1"><a href="#">Link 4</a> 
     </div> 
     <div class="b1"><a href="#">Link 5</a> 
     </div> 
    </div> 
</nav> 

JS

$(".trigger").click(function() { 
    var $this = $(this), 
     ul = $this.parents('ul'), 
     dataId = $this.data('id'), 
     subMenu = $this.parents('nav').find('[data-sub-id="' + dataId + '"]'), 
     subMenus = $this.parents('nav').find('.block'); 

    //remove classes from all items 
    ul.find('li a').each(function() { 
     $(this).removeClass('item-active'); 
    }); 

    subMenus.each(function() { 
     $(this).removeClass('blocks');  
    }); 

    //add classes to this item 
    $this.addClass('item-active'); 
    subMenu.addClass('blocks'); 
}); 
+0

我忘了添加內容。基本上也會發生內容觸發。我只想要內容再次出現,如果菜單項被取消選擇http://jsfiddle.net/bk38w/92/ – Steve 2014-10-31 20:34:05

+0

我剛剛嘗試的東西。我會告訴你這裏的代碼:http://jsfiddle.net/pevnuL1y/2/ – Steve 2014-10-31 20:43:30

+0

@Steve內容是否假設每個菜單項都改變了?我的意思是,如果你按「家」,你想要顯示「家庭內容」,如果你按「產品」,它顯示「產品內容」? – 2014-11-01 06:03:40