2012-10-17 54 views
4

我有一個checkboxestreelist多層次的,我試圖讓父checkbox顯示爲'checked'被點擊任何兒童checkboxes的時候。出於某種原因,這不起作用,它正在殺死我。jQuery的選擇最接近的複選框收件箱不工作

JAVASCRIPT

$(function() { 
     $("input.boundChild[type=checkbox]").click(function() {    
      $(this).closest("input.boundParent").prop("checked", "checked"); 
     }); 
}); 

HTML

<ul> 
    <li class="collapsed expanded"> 
     <input id="0" class="boundParent" type="checkbox" > 
     Australia 
      <ul style="display: block;"> 
       <li> 
        <input id="0/" class="boundChild" type="checkbox" checked=""> 
        <input type="hidden" value="Intel Australia PTY Ltd."> 
       </li> 
      </ul> 
    </li> 
</ul> 

回答

9

input元素不能有子元素,在你的標記中input.boundParent不是input.boundChild的父母之一。這是ul元素的兄弟姐妹。您可以使用prev方法。

$(function() { 
    $("input.boundChild[type=checkbox]").click(function() {    
     $(this).closest('ul').prev().prop("checked", this.checked); 
     // $('input.boundParent').prop("checked", this.checked); 
    }); 
}); 

http://jsfiddle.net/dhVvN/

+0

偉大的答案,很好的解釋。 – silvster27

+0

雅,很好的解釋。雖然,你應該最好使用父母()作爲最接近()將包括節點本身在這個樣本中是無用的。 –

0

嘗試:

$(this).parent("li.expanded").find("input.boundParent").attr("checked","checked"); 

在父裏總是有expanded類,當你選擇一個孩子。