2012-11-21 34 views
1

我有以下的HTML元素:檢查不檢查checkboxs的n個

<input type="checkbox" id="dog_pop_123"> 
<input type="checkbox" id="cat_pop_123"> 
<input type="checkbox" id="parrot_pop_123"> 

我要檢查,如果不檢查的複選框的三個,我需要返回false。但是,我需要考慮到第三個複選框可能不存在。

現在我有這樣的:

var id = 123; 

if (!$('#dog_pop_'+id+':checked').length 
    && !$('#cat_pop_'+id+':checked').length 
    && !$('#parrot_pop_'+id+':checked').length) { 
    return false; 
} 

然而,如果最後輸入不存在,與前兩部確實存在,被檢查,這將返回false,並且它不應該。

我該如何解決這個問題?

+0

你談論一個HTML結構,但我沒有看到任何。如果您發佈該腳本所針對的HTML代碼段,我們將能夠爲您提供幫助。 – bigblind

+0

如果兩個複選框未被選中,並且選中了一個複選框會怎麼樣?你是否需要檢查所有*複選框(不管有多少)或只檢查了至少一個? –

+0

它的目標是基於ID的那些輸入。 –

回答

2

我建議複選框組合在一起,共同的父之內:

<fieldset id="group1"> 
    <input type="checkbox" id="dog_pop_123"> 
    <input type="checkbox" id="cat_pop_123"> 
    <input type="checkbox" id="parrot_pop_123"> 
</fieldset> 

,並使用以下:

return !($('#group1 input:checkbox').length == $('#group1 input:checkbox:not(":checked")').length); 

有效,如果複選框的個數等於的數未勾選的複選框返回false(使用!運算符),否則返回true。

參考文獻:

+0

大衛托馬斯這是一個極好的方法。不過,我不能將它們分組,因爲它們位於DOM的不同部分。也可以是其他複選框,我不想考慮... –

+0

然後,如果您可以顯示一些示例html,那麼您可以幫助自己和我們,這樣我們就可以看到您的html的樣子。 –

0

試試下面的代碼:除非你有很多IDS在pop_123結束

var id = 123, 
    checkboxes = $('#dog_pop_' + id + ', #cat_pop_' + id + ', #parrot_pop_' + id); 
if(checkboxes.filter(function() {return this.checked !== true;}).length !== checkboxes.length) { 
    //Not all checkboxes are checked 
} 
+0

我需要用ID標識它們。我不能只查找所有的複選框。 –

+0

@HommerSmith檢查我的更新答案。 – Kyle

0
if($('input[id$="pop_123"]').length != $('input[id$="pop_123"]:checked').length) { 
    return false; 
} 

應該做的伎倆。在這種情況下,您也可以添加[type=checkbox]過濾器。

在選擇器裝置中使用$=結束於。見documentation