2

问题:

我有一个类别列表,其中某些类别有子类别,我正在尝试创建一个 ALL 类别,单击该类别时,将检查同一类别中的所有兄弟复选框。

例如; 单击MUSIC类别下的ALL将检查blues, jazz, rock n roll

代码:

HTML:

<ul name="events-categories" id="events-categories">
    <li><input type="checkbox" name="category-events" value="185" placeholder="" id="category-185" class="events-category"> CONVENTIONS
        <ul class="event-children">
            <li><input type="checkbox" name="child-category-all" value="" class="events-child-category-all">ALL</li>
            <li><input type="checkbox" name="child-category-190" value="190" id="child-category-190" class="child events-child-category">SCIENCE</li>
            <li><input type="checkbox" name="child-category-191" value="191" id="child-category-191" class="child events-child-category">TECHNOLOGY</li>
        </ul>
    </li>
    <li><input type="checkbox" name="category-events" value="184" placeholder="" id="category-184" class="events-category"> MUSIC
        <ul class="event-children">
            <li><input type="checkbox" name="child-category-all" value="" class="events-child-category-all">ALL</li>
            <li><input type="checkbox" name="child-category-189" value="189" id="child-category-189" class="child events-child-category">BLUES</li>
            <li><input type="checkbox" name="child-category-188" value="188" id="child-category-188" class="child events-child-category">JAZZ</li>
            <li><input type="checkbox" name="child-category-187" value="187" id="child-category-187" class="child events-child-category">ROCK N ROLL</li>
        </ul>
    </li>
    <li><input type="checkbox" name="category-events" value="186" placeholder="" id="category-186" class="events-category"> TRIBUTES</li>
</ul>​

CSS:

.event-children {
    margin-left: 20px;
    list-style: none;
    display: none;
}​

到目前为止的jQuery:

/**
 * left sidebar events categories
 * toggle sub categories
 */
$('.events-category').change( function(){
    console.log('showing sub categories');
    var c = this.checked;
    if( c ){
        $(this).next('.event-children').css('display', 'block');
    }else{
        $(this).next('.event-children').css('display', 'none');
    }
});

$('.events-child-category-all').change( function(){
    var c = this.checked;
    if( c ){
        $(this).siblings(':checkbox').attr('checked',true);
    }else{
        $(this).siblings(':checkbox').attr('checked',false);
    }
});​

jsfiddle:http: //jsfiddle.net/SENV8/

4

4 回答 4

7
$('.events-child-category-all').change( function(){
    $(this).parent().siblings().find(':checkbox').attr('checked', this.checked);
});​

http://jsfiddle.net/SENV8/3/

于 2012-06-05T04:33:33.737 回答
0

你需要的是这个,因为那些checkboxes不是siblings

$('.events-child-category-all').change( function(){
    var c = this.checked;
    if( c ){
        $(this).closest('.event-children').find(':checkbox').attr('checked',true);
    }else{
        $(this).closest('.event-children').find(':checkbox').attr('checked',false);
    }
});​

工作小提琴

于 2012-06-05T04:31:45.930 回答
0

也许是这样的:

$(".events-child-category-all").click(function() {
   $(this).closest("ul").find("input[type=checkbox]").prop("checked",this.checked);
});

.closest()方法遍历 DOM 树以查找匹配元素,在本例中查找复选框所在的“ul”。

如果您使用的 jQuery 版本早于 1.6,您将需要.attr()使用.prop().

于 2012-06-05T04:32:03.600 回答
0

http://jsfiddle.net/ahren/SENV8/2/

$('.events-child-category-all').change( function(){
    var c = this.checked;
    if( c ){
        $(this).parent().siblings().find(':checkbox').prop('checked',true);
    }else{
        $(this).parent().siblings().find(':checkbox').prop('checked',false);
    }
});​

触发siblings的输入没有。change您首先需要上一级到 parent li,然后抓住它siblings,并使用它find()来获取他们的复选框。或者你可以使用children()而不是find()

于 2012-06-05T04:32:10.050 回答