基于JQ的多选/全选/反选

<!-- author:青芒 -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>多选/全选/反选</title>
</head>
<body>

    <p>中国古代十大名剑</p>
    <input type="checkbox" value="全选" id="selectAll"/>全选
    <div id="checkBoxList" class="check-all">  
        <input type="checkbox" value="轩辕"/>轩辕<br>  
        <input type="checkbox" value="湛泸"/>湛泸<br>  
        <input type="checkbox" value="赤霄"/>赤霄<br>  
        <input type="checkbox" value="太阿"/>太阿<br>  
        <input type="checkbox" value="七星龙渊"/>七星龙渊<br>  
        <input type="checkbox" value="干将"/>干将<br>  
        <input type="checkbox" value="莫邪"/>莫邪<br>  
        <input type="checkbox" value="鱼肠"/>鱼肠<br>  
        <input type="checkbox" value="纯钧"/>纯钧<br>  
        <input type="checkbox" value="承影"/>承影<br>  
    </div>  
    

    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
    <script>
        $(function(){
            $("#selectAll").click(function(){ //全选/反选
                var checkedFlag = this.checked;
                $("#checkBoxList :checkbox").prop("checked", checkedFlag);
            }); 

            $("#checkBoxList :checkbox").click(function(){
                var length1 = $("#checkBoxList :checkbox").length; //选项个数
                var length2 = $("#checkBoxList :checkbox").filter(":checked").length; //已勾选的个数
                if(length1 === length2){
                    $("#selectAll").prop("checked", true);
                }else{
                    $("#selectAll").prop("checked", false);
                }
            })
        })
    </script>
</body>
</html>

这里需要注意 attr 和 prop 的区别,虽然两个的作用都是给标签添加属性,但是在实际使用过程中,二者对checked属性作用不同,用attr的时候只能选中/取消一次,然后就没作用了,但是prop不会有这个问题。

百度后发现:

对于一个checkbox,若未定义checked="checked",alert($.attr("checked")) 的结果是undefined。若已定义则结果是checked。attribute并不随着checkbox的状态变化而改变。
使用prop($.attr("checked"))的话输出则分别为false和true。property则随其变化而变化。
所以在修改checked属性时要使用prop()。prop()在jQuery1.6版本后新增。

猜你喜欢

转载自www.cnblogs.com/muou2125/p/9212433.html
今日推荐