2013-02-13 153 views
11

首先,只是想說我對jQuery沒有希望。jQuery選擇所有兒童複選框

我一直在尋找從一個職位上這裏一些代碼,選擇每個父複選框(和作品):

$(function() { 
    $(":checkbox").change(function() { 
    $(this).parents().children(':checkbox').attr('checked', this.checked); 
    }); 
}); 

我們使用<ul> <li>樹視圖結構,每個<li>都有一個複選框。 我想做與上述相反的操作,並在所有子複選框上執行相同的複選框選擇。

任何人都可以修改上述做到這一點?

只是要注意,我們使用的剃刀和每個複選框是@ Html.CheckboxFor所以輸出線沿線的:

<input name="Survey.Buildings[0].IsSelected" type="checkbox" value="true" checked="checked" data-val="true" data-val-required="The Selected? field is required." id="Survey_Buildings_0__IsSelected" /> 
<input name="Survey.Buildings[0].IsSelected" type="hidden" value="false" /> 
  • 編輯2:

好,我有固定的HTML和結構現在看起來像:

<ul> 
    <li> Cbx1 
     <ul> 
      <li> Cbx 2 </li> 
     </ul> 
    </li> 
    <li> Cbx3 </li> 
    <li> Cbx4 
     <ul> 
      <li> Cbx 5 </li> 
      <li> Cbx 6 </li> 
     </ul> 
    </li> 
</ul> 

因此,如果Cbx4被檢查Cbx5 a ND 6將被檢查,如果它未選中,他們將選中

非常感謝

安迪

+0

你將不得不提供一些具體的HTML代碼段,並準確描述了箱應檢查當某一箱變。 – nbrooks 2013-02-13 12:29:09

+0

更新我的文章 – 2013-02-13 12:34:29

+0

如果Cbx2沒有檢查到任何事情會發生,我很想切換子複選框。所以cbx1會切換cbx2而不是反過來,而cbx4會切換cbx5和6. – 2013-02-13 12:45:47

回答

27

jsFiddle Demo

$(function() { 
    $("input[type='checkbox']").change(function() { 
    $(this).siblings('ul') 
      .find("input[type='checkbox']") 
      .prop('checked', this.checked); 
    }); 
}); 
+0

問題是,在你的jsfiddle例子中,當選擇3時,選擇了4並且它不是3的子。所以在我的帖子的例子中Cbx3被選中沒有其他的會受到影響,因爲它沒有孩子LI的 – 2013-02-13 12:43:02

+0

我看到是的,5和6應該存在於同一個LI中,這可能是我的問題,我會修改我的HTML,並且你的例子會工作嗎? – 2013-02-13 12:49:04

+0

我已更新我的文章以反映HTML現在的樣子。正如你所看到的,CBx5和CBX6現在是CBX4列表中的一個子列表。那有意義嗎? – 2013-02-13 12:58:46

0
$(function() { 
    $(":checkbox").change(function() { 
    $(this).children(':checkbox').attr('checked', this.checked); 
    }); 
}); 

不是真的與你的問題清楚,但你可以通過刪除父再試一次()如上所示。