2013-03-29 71 views
0

我想使用jquery來計數div中的複選框的數量,但只有當div顯示設置爲阻止,而不是當它設置爲無。這根據按鈕按下而改變。jquery計數複選框在div顯示:塊,但不顯示:無

我到目前爲止已經試過這樣:

$("div:#divid:visible").find('input:checkbox').length 
$('input:checkbox:visible').length 
$("div:#divid").find('input:checkbox.visible').length 

什麼似乎總是發生時,如果包括「看得見」,那麼它總是計數0複選框,不管他們的父母DIV是display:none或塊,如果我不包含「可見」,它總是統計所有的複選框,再次忽略父div的顯示狀態。複選框本身沒有顯示屬性。

回答

3

你在你的第一個有一個額外的:,你想:

$("div#divid:visible").find('input:checkbox').length 
// ^---- No : here 

雖然div在開首是沒有意義的(無害的,但毫無意義的),除非有id="divid"元素可能是一個div有時而不是其他時間,如果它不是div,您想跳過它。更有可能的是,剛:

$("#divid:visible").find('input:checkbox').length 

儘管實際上,你可以只用一個選擇這樣做,而不是調用find

$("#divid:visible input:checkbox").length 

另外請注意,您需要確保相關div是在DOM並且有display設置,您需要檢查上面的代碼運行時間,因爲它將在時刻查看

示例 - Live Copy | Source

HTML:

的JavaScript:

(function($) { 

    display('$("#div1:visible input:checkbox").length = ' + $("#div1:visible input:checkbox").length); 
    display('$("#div2:visible input:checkbox").length = ' + $("#div2:visible input:checkbox").length); 

    function display(msg) { 
    $("<p>").html("<code>" + msg + "</code>").appendTo(document.body); 
    } 
})(jQuery); 

結果:

$("#div1:visible input:checkbox").length = 5 

$("#div2:visible input:checkbox").length = 0
+0

我試過這個,但它也沒有工作。同樣,同樣的行爲,當我不使用可見時選擇全部,或者當我選擇時不選擇。 – CHP

+0

@CHP:不知道該告訴你什麼。如果在執行上面的查詢時div被隱藏*,則其子複選框不會被計數。如果它沒有隱藏,他們會。看到我添加的實例。 –

+0

你在評論中告訴我正確的東西:)我試圖編輯的腳本很複雜,並不是我自己的,但是通過移動('#divid:visible''input:checkbox')。length到不同的部分的腳本,它的作品。我相信它必須在div顯示改變之前和之後多次做選擇器,併產生我看到的結果。但是現在我將它移到了我調用的函數的頂部,以便它與其他任何代碼分開進行,它就可以工作。我想接受你的答案,但實際上這個評論是正確的。 – CHP

0

試試這個

$("#divid:visible").find('input[type=checkbox]').length; 
+0

''#divId:visible''將匹配*'#divId'內的所有*可見元素* - '#divId'和':visible'之間不應有空格。 – techfoobar

+0

我試過了,但沒有奏效。我得到了同樣的行爲。當我指定「可見」時沒有選擇任何東西,而當我不指定時則選擇了所有選擇。 – CHP