2011-11-11 69 views
1

我需要以選中/取消父母和孩子的投入是合乎邏輯的:檢查/取決於父/子輸入狀態取消選中輸入

[x] parent [ ] child1 [x] child2 

在這個例子中,如果我取消child2parent需求是也沒有檢查。而且,如果我取消選中parent,則不能再檢查child2

[ ] parent [ ] child1 [ ] child2 

在這種情況下,如果我檢查child2parent也必須被檢查。

我認爲這是非常合乎邏輯的,如果沒有檢查其父母,就無法檢查孩子,如果我取消選中一個孩子(並且這是唯一被檢查的孩子),父母也必須取消選中。

我正在研究PHP,所以任何與Javascript(jQuery)的集成對我來說都會很好。

+0

什麼是您的HTML是什麼樣子?你有什麼嘗試? –

+0

沒有你的html,你不能真正回答這個問題。 – mrtsherman

+0

HTML在這裏是不相關的...想象一下只有3個輸入,其中一個具有'class =「parent」',另外兩個具有'class =「children」' – scumah

回答

1

這可能是一個很好的起點:

<form id="theform"> 
    <label>Parent</label><input name="group1" type="checkbox" value="parent1" class="parent" /> 
    <label>Child 1</label><input name="group1" type="checkbox" value="child1" class="child" /> 
    <label>Child 2</label><input name="group1" type="checkbox" value="child2" class="child" /> 
    <label>Child 3</label><input name="group1" type="checkbox" value="child3" class="child" /> 
</form> 

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('#theform input:checkbox').change(function(){ 
      // Parent Checkbox Change // 
      if ($(this).hasClass('parent')){ 
       if (!$(this).is(':checked')){ 
        $('input.child[name="'+$(this).attr('name')+'"]').removeAttr('checked'); 
       } 
      } 
      // Child Checkbox Change // 
      else if ($(this).hasClass('child')){ 
       if ($(this).is(':checked')){ 
        $('input.parent[name="'+$(this).attr('name')+'"]').attr('checked', 'checked'); 
       } else { 
        if ($('input.child[name="'+$(this).attr('name')+'"]:checked').length == 0){ 
         $('input.parent[name="'+$(this).attr('name')+'"]').removeAttr('checked'); 
        } 
       } 
      } 
     }); 
    }); 
</script> 

小提琴這裏:http://jsfiddle.net/pjZnZ/3/

我希望這有助於!

+0

編輯爲只有在所有兒童輸入未經檢查時才取消檢查父母。 – dSquared

+0

非常感謝!這兩個代碼工作,但我選擇dSquared解決方案,因爲孩子檢查父母輸入,而不是禁止它被檢查,我發現這將是有用的。再次感謝! – afontcu

+0

這對我有幫助。非常感謝! :D – Erik

0

檢查此琴:http://jsfiddle.net/WvYgB/1/

的jQuery:

$('.parent').change(function(){ 
    if (!($(this).is(':checked'))) { 
     $('.children').attr('checked', false); 
    } 
}); 

$('.children').change(function(){ 
    if($(this).is(':checked') && !$('.parent').is(':checked')) { 
     $(this).attr('checked', false); 
    } 
    if (!($(this).is(':checked') || $(this).siblings('.children').is(':checked'))) { 
     $('.parent').attr('checked', false); 
    } 
}); 
+0

小錯誤 - 在檢查父母之前,您無法檢查孩子。這是他的規範。 – mrtsherman

+0

@mrtsherman,在這個瀏覽器中你在看小提琴嗎?它適用於我:( – scumah

+0

鉻15,IE9和FF8。問題是你的第一條if語句。它說,如果這是檢查&&父母沒有選中,然後刪除檢查。它應該檢查其父,而不是取消選中本身。 – mrtsherman