2015-10-28 64 views
-2

由於一些奇怪的原因,我添加的這個簡單的點擊功能,應該是將「大」類添加到點擊的div,只適用於其他div。'toggleClass'不適用於所有其他div

See an example here(點擊方框與圖片)

$('.box').click(function(){ 

$(this).toggleClass('big').siblings().removeClass('big'); 

});  

這裏是一個小提琴,但我選擇不發佈這個,因爲它工作得很好,因爲它應該做的。該錯誤是由其他一些因素引起的,但我不知道是什麼 http://jsfiddle.net/Ly1bxswq/1/

+4

發佈完整的代碼示例你的問題吧。 – j08691

+0

也許是因爲每個其他元素都有不同的類。 – epascarello

+0

不,所有元素都有JavaScript調用的類'.big' – bboybeatle

回答

4

您在循環中綁定你的click處理程序,但需要做的只有一次,當所有的元素添加到頁面。

$.each(data.feed.entry, function (i, entry) { 
    // ... 
    $container.append(item); 
    // ... 
}) 

$('.box').click(function(){ 
    $(this).toggleClass('big').siblings().removeClass('big'); 
} 

正如指出的@Yan深色的評論,這將是更好地從各個.box事件委託給他們的父母。這樣,你可以綁定你在任何時候(.box元素被添加到頁面甚至更早)處理器

$container.on("click", ".box", function(){ 
    $(this).toggleClass('big').siblings().removeClass('big'); 
}); 
+2

以這種方式委託事件會更好:'('#'')。on(「click」,「.box」,函數(){});' –

+0

@YanBrunet,是的,你是對的,它會好得多。剛纔在提出建議之前就想出了什麼問題,我會在一秒鐘之內添加它。 –

+1

這是一個有趣的。 bboy beatle:使用委託會阻止這種行爲,因爲無論何時創建元素,它都會應用。性能明智,它也更好(每個'.box'項目只創建1個處理程序而不是1個) –

相關問題