1

我在我正在开发的网站上创建了一个搜索功能,但我被困在这部分。搜索功能有一个类别列表,用户可以选中或取消选中以过滤项目。这些选项几乎与Coursera实现其搜索功能的方式相同。我希望在选中“所有类别”选项时取消选中所有其他复选框,并在未选中其他任何内容时取消选中“所有类别”复选框。这听起来有点令人困惑,但这正是该网站所实施的。

下面是代码示例:

<div class="filter-grade">
    <label class="checkbox">
        <input type="checkbox" id="grade-all" name="grade[]" value="0" checked><b>All Grades</b>
    </label>
    <label class="checkbox">
        <input type="checkbox" id="grade-9" name="grade[]" value="9">Grade 9
    </label>
    <label class="checkbox">
        <input type="checkbox" id="grade-10" name="grade[]" value="10">Grade 10
    </label>
    <label class="checkbox">
        <input type="checkbox" id="grade-11" name="grade[]" value="11">Grade 11
    </label>
    <label class="checkbox">
        <input type="checkbox" id="grade-12" name="grade[]" value="12">Grade 12
    </label>
</div>
4

2 回答 2

3

尽管我发表了评论,但我还是建立了一个小提琴:http: //jsfiddle.net/ctnCn/5/

$('.group input').on('change', function() {
    var $inputs = $(this).siblings('input').add(this),
        $checked = $inputs.filter(':checked'),
        $all = $inputs.eq(0),
        index = $inputs.index(this);

    (index === 0 ? $checked : $all).removeAttr('checked');

    if(index === 0 || $checked.length === 0) {
        $all.attr('checked', 'checked');
    }
});

更新为项目特定:http: //jsfiddle.net/ctnCn/6/

$('.filter-grade input').on('change', function() {
    var $inputs = $(this).closest('div').find('input'),

虽然我想指出这不是标签元素的标准用法。我建议将您的标记更改为标签和输入是兄弟姐妹(并使用“id”和“for”属性来链接它们)。看看这个参考:http ://www.w3schools.com/tags/tag_label.asp我以前的小提琴也提供了一个标准标记约定的例子。

于 2013-08-13T19:49:49.177 回答
2

此代码也可以解决问题。从ArraryKnigh的答案中走上正确的道路。您还可以检查小提琴

$('.group :checkbox').filter("[class!='group-all']").on('change', function() {
     var parentDiv=$(this).parent();
    $('.group-all',parentDiv ).attr('checked',false);
 });

$('.group :checkbox').filter("[class='group-all']").on('change', function() {
    var parentDiv=$(this).parent();
    $('input',parentDiv ).attr('checked',false);
    $(this).attr('checked',true);
 });
于 2013-08-13T20:38:03.447 回答