2013-10-14 38 views
1

我有由排序標準的菜單。每個標準的選項都被列爲一個div類,複選框'.collapse_box'。如果div包含選中的複選框設置顯示到框

我需要檢查每一個div的,看看是否任何它所包含的複選框被選中。如果有任何複選框,我需要將DIV顯示設置爲阻止。

我是基於這樣的思考:

$('.collapse_box')each(function() 

    if($(this).(input:checked).length() > 0{ //here lies my problem 
     $(this).show(); 
    } 

}); 

眼看我很新的JavaScript和jQuery我不知道如何返回檢查盒$(本)。或者更好地說:檢查$(this)中的任何複選框是否被選中的正確方法。

+0

至少,您目前缺少'.'和'{'。 –

回答

5

你的選擇是錯誤的,元素總是給出字符串或對象:

if($(this).find('input:checked').length > 0){ 

此外,length心不是功能,而是一個屬性。你忘了.find()
Made you a jsFiddle with demo

+1

你需要用「)」 – Adween

+0

錯過了一個封閉的if語句條件,固定它,謝謝 – Martijn

+0

尼斯的jsfiddle例如+1 – Adween

1

好吧,假設input s爲孩子,像這樣將工作:

$('.collapse_box').each(function(){ 
    if($(this).find('input').prop('checked')){ 
     $(this).show(); 
    } 
}); 

.prop('checked')件返回的input是否一個布爾值檢查或不。

編輯 Martijn提供了一個很好的觀點,你可以用選擇器將它切換到vanilla JS。

$('.collapse_box').find('input').each(function(){ 
    var self = this; 
    if(self.checked){ 
     self.style.display = 'block'; 
    } 
}); 
+0

如果你做的每'()',它會是好做'如果( this.checked)',更lighhtweight :)可能需要改變循環了一下,纔剛剛以突出改善 – Martijn

+0

哈哈,節約'this'到'self'心不是需要無論是在這個例子。 'this'已經是元素的選擇器,將它複製到另一個var只是浪費內存。但+1爲原生JS增加了樣式。 jQuery是由用戶配發濫 – Martijn

+1

是啊,我知道了'self'東西心不是必要的,它只是舊習慣。當不止一次地引用'this'時,我總是捕獲,就像我做對象一樣。除個人風格外沒有其他理由。 – PlantTheIdea