2012-07-17 93 views
2

你好,我想做以下事情。檢查所有複選框nextUntil

我有一個列表與複選框是這樣的:

<ul> 
    <li class="omzet_first"><input type="checkbox" name="omzet" id="12" value="12" alt="Opbrengsten" checked="checked">Opbrengsten</li> 
    <li class="omzet_second"><input type="checkbox" name="omzet" id="13" value="13" alt="Netto Omzet">Netto Omzet</li> 
    <li class="omzet_second"><input type="checkbox" name="omzet" id="14" value="14" alt="Overige Opbrengsten">Overige Opbrengsten</li> 
    <li class="omzet_first"><input type="checkbox" name="omzet" id="15" value="15" alt="Kosten van grond-en Hulpstoffen/Uitbesteed werk">Kosten van grond-en Hulpstoffen/U</li> 
    <li class="omzet_second"><input type="checkbox" name="omzet" id="16" value="16" alt="Inkoopprijs van de verkopen">Inkoopprijs van de verkopen</li> 
    <li class="omzet_second"><input type="checkbox" name="omzet" id="17" value="17" alt="Kosten uitbesteed werk">Kosten uitbesteed werk</li> 
    <li class="omzet_first"><input type="checkbox" name="omzet" id="18" value="18" alt="Personeelskosten">Personeelskosten</li> 
    <li class="omzet_second"><input type="checkbox" name="omzet" id="19" value="19" alt="Lonen &amp; Salarissen">Lonen &amp; Salarissen</li> 
    <li class="omzet_second"><input type="checkbox" name="omzet" id="20" value="20" alt="Sociale lasen">Sociale lasen</li> 
    <li class="omzet_second"><input type="checkbox" name="omzet" id="21" value="21" alt="Pensioen lasten">Pensioen lasten</li> 
</ul> 

當與類omzet_first李一複選框被選中我想檢查與類omzet_second李全接下來的複選框,直到下一個李.omzet_first。

我試過,但沒有工作

$('.omzet_first input:checked').each(function() { 
    $(this).nextUntil(".omzet_first", ".omzet_second input:checkbox").prop("checked", true); 
}); 

任何建議,該怎麼辦?

回答

3

在您的事件處理程序中,this是複選框。您必須適當地瀏覽DOM樹(在找到兄弟姐妹之前向上移動到其父親.omzet_first,然後向下移動)。另請注意,您也應該使用選擇器.omzet_firstnextUntil

$('.omzet_first input:checked').each(function() { 
    $(this).closest(".omzet_first") 
      .nextUntil(".omzet_first") 
      .find("input:checkbox") 
      .prop("checked", true); 
}); 
+0

這將事件處理程序只能綁定到最初檢查發現的複選框。 (另外,'this.checked'(可以說)更容易閱讀,但肯定比$(this).prop(「checked」)更有效。) – nnnnnn 2012-07-17 07:59:00

+0

@nnnnnn:出於某種原因,我精神上錯過了':checked'部分。它現在是合理的,編輯代碼來反映。 – Jon 2012-07-17 08:05:11

3

.each()循環與:checked處理任何在當時檢查複選框的選中元素代碼運行 - 它不會對盒子用戶點擊響應。

如果這個想法是你需要處理該事件的用戶的響應點擊:

$('.omzet_first input[type="checkbox"]').click(function() { 
    $(this).parent().nextUntil(".omzet_first") 
      .find('input[type="checkbox"]').prop("checked", this.checked); 
}); 

要解釋這些代碼:當omzet_first一個複選框被點擊查找其父(李)然後選擇所有父母的兄弟姐妹直到下一個omzet_first,然後找到這些lis中的子複選框並設置其checked屬性。 (如果李不輸入的直接父,你會使用$(this).closest(".omzet_first")代替$(this).parent()。)

演示:http://jsfiddle.net/498vw/