5

我正在尝试通过单击表头中的一个复选框来选中/取消选中所有复选框。首先单击将属性添加到输入,然后取消选中。它只工作一次。在 Firefox 和 Chrome 上进行测试。А属性不断变化,但这没有显示在页面中。我只在浏览器调试器中看到它。

<table>
    <thead>
        <tr>
            <th><input type="checkbox" /></th>
            <th>#</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><input type="checkbox" /></td>
            <td>1</td>
        </tr>
        <tr>
            <td><input type="checkbox" /></td>
            <td>2</td>
        </tr>
        <tr>
            <td><input type="checkbox" /></td>
            <td>3</td>
        </tr>
    </tbody>
</table>

<script type="text/javascript">
$(function () {
    $('th input[type="checkbox"]').click(function(){
        if ( $(this).is(':checked') )
            $('td input[type="checkbox"]').attr('checked', 'checked');
        else
            // $('td input[type="checkbox"]').attr('checked', false);
            $('td input[type="checkbox"]').removeAttr('checked');
    })
});
</script>

示例 http://jsfiddle.net/aJhm9/

4

5 回答 5

17

使用属性而不是属性

$(function () {
    $('th input[type="checkbox"]').click(function(){
        if ( $(this).is(':checked') )
            $('td input[type="checkbox"]').prop('checked', true);
        else
            $('td input[type="checkbox"]').prop('checked', false);
    })
});

http://jsfiddle.net/aJhm9/2/

于 2013-04-16T05:39:26.837 回答
3

.attr()仅用于修改元素的默认状态,而不是其活动状态.prop()用于更改元素的活动状态。

于 2013-04-16T05:40:13.133 回答
0

使用prop()而不是attr()

 $(function () {
   $('th input[type="checkbox"]').click(function(){
    if ( $(this).is(':checked') )
        $('td input[type="checkbox"]').prop('checked', true);
    else
        $('td input[type="checkbox"]').prop('checked', false);
   })
});

工作小提琴

于 2013-04-16T05:40:14.313 回答
0
<script>
    $('#select_all').click(function () {
    $( this ).closest('form').find(':checkbox').prop( 'checked' , this.checked ? true : false );
})
</script>
于 2014-06-10T09:34:57.323 回答
0

为什么要使用 jQuery 来完成这么小的任务?只需将表格顶部的主复选框的 ID 设置为唯一名称。然后将特定类添加到表中的所有其他复选框。然后使用以下代码: -

var mainCheckbox = document.getElementById('name_of_ID');

if(window.addEventListener) {
    mainCheckbox.addEventListener('change', togglecheckboxes, false);
} else {
    mainCheckbox.attachEvent('onchange', togglecheckboxes);
}

function togglecheckboxes(){
    var otherCheckboxes = document.getElementsByClassName('name_of_CLASS'); //returns an array
        for(var i = 0; i < otherCheckboxes.length; i++){
            otherCheckboxes[i].checked = mainCheckbox.checked;
        }
}
于 2013-04-16T05:53:08.520 回答