CSS3+JS实现的个性化全选反选

监控所有列表项下的checkbox是否都处在选中的状态,如果全选中则全选按钮处在选中状态;当存在checkbox未选中时,取消全选按钮的选中状态。
  <!-- JS -->
window.onload = function(){
    selectAll();
    doCheckbox();
}
function Id(id){
    return document.getElementById(id);
}
//全选反选操作
function selectAll(){
    var checklist = document.getElementsByName("inputCheck");
    var Checkall = Id("Checkall");
    if(Checkall.checked)
    {
        Checkall.parentNode.classList.add("act_checkbox");
        for(var i=0;i<checklist.length;i++)
        {
            checklist[i].checked = 1;
            checklist[i].parentNode.classList.add("act_checkbox");
        }
    }else{
        Checkall.parentNode.classList.remove("act_checkbox");
        for(var j=0;j<checklist.length;j++)
        {
            checklist[j].checked = 0;
            checklist[j].parentNode.classList.remove("act_checkbox");
        }
    }
}
//部分选中状态下的操作
function noselectall(){
    var count=0;
    var Checkall = Id("Checkall");
    var checklist = document.getElementsByName ("inputCheck");
    for(var i=0;i<checklist.length;i++){
        if(checklist[i].checked == true){
            //选中的操作
            count++;
            checklist[i].parentNode.classList.add("act_checkbox");
        }
    }
    if(count==checklist.length){ //所有元素都被选中时,打上全选状态
        Checkall.checked = true;
        Checkall.parentNode.classList.add("act_checkbox");
    }
}

//单个元素选中与未选中状态的处理
function doCheckbox(){
    var oUl = Id("checkUl");
    var Checkall = Id("Checkall");
    //将监听操作事件迁移到父亲元素上,采用事件委托的形式处理input点击操作
    oUl.onclick = function(ev){
        var ev = ev || window.event;
        var target = ev.target || ev.srcElement;
        if(target.nodeName.toLowerCase() == 'input'){
            if(target.checked==false){ //存在元素未被选中时,取消全选状态
                Checkall.checked = false;
                Checkall.parentNode.classList.remove("act_checkbox");
                target.parentNode.classList.remove("act_checkbox");
            }else{
                noselectall();
            }
        }
    }
}
function submitCheck(){
    var arrCheck = [];
    var checklist = document.getElementsByName("inputCheck");
    for(var i=0;i<checklist.length;i++){
        if(checklist[i].checked == true){
            //选中的操作
            arrCheck.push(checklist[i].value);
        }
    }
    console.log("arrCheck="+arrCheck);
    return arrCheck;
}window.onload = function(){
    selectAll();
    doCheckbox();
}
function Id(id){
    return document.getElementById(id);
}
//全选反选操作
function selectAll(){
    var checklist = document.getElementsByName("inputCheck");
    var Checkall = Id("Checkall");
    if(Checkall.checked)
    {
        Checkall.parentNode.classList.add("act_checkbox");
        for(var i=0;i<checklist.length;i++)
        {
            checklist[i].checked = 1;
            checklist[i].parentNode.classList.add("act_checkbox");
        }
    }else{
        Checkall.parentNode.classList.remove("act_checkbox");
        for(var j=0;j<checklist.length;j++)
        {
            checklist[j].checked = 0;
            checklist[j].parentNode.classList.remove("act_checkbox");
        }
    }
}
//部分选中状态下的操作
function noselectall(){
    var count=0;
    var Checkall = Id("Checkall");
    var checklist = document.getElementsByName ("inputCheck");
    for(var i=0;i<checklist.length;i++){
        if(checklist[i].checked == true){
            //选中的操作
            count++;
            checklist[i].parentNode.classList.add("act_checkbox");
        }
    }
    if(count==checklist.length){ //所有元素都被选中时,打上全选状态
        Checkall.checked = true;
        Checkall.parentNode.classList.add("act_checkbox");
    }
}

//单个元素选中与未选中状态的处理
function doCheckbox(){
    var oUl = Id("checkUl");
    var Checkall = Id("Checkall");
    //将监听操作事件迁移到父亲元素上,采用事件委托的形式处理input点击操作
    oUl.onclick = function(ev){
        var ev = ev || window.event;
        var target = ev.target || ev.srcElement;
        if(target.nodeName.toLowerCase() == 'input'){
            if(target.checked==false){ //存在元素未被选中时,取消全选状态
                Checkall.checked = false;
                Checkall.parentNode.classList.remove("act_checkbox");
                target.parentNode.classList.remove("act_checkbox");
            }else{
                noselectall();
            }
        }
    }
}
function submitCheck(){
    var arrCheck = [];
    var checklist = document.getElementsByName("inputCheck");
    for(var i=0;i<checklist.length;i++){
        if(checklist[i].checked == true){
            //选中的操作
            arrCheck.push(checklist[i].value);
        }
    }
    console.log("arrCheck="+arrCheck);
    return arrCheck;
}
<!- HTML -->
<div class="box">
    <div class="cont">
        <div class="all_checkbox">
            <div class="checkbox act_checkbox">
                <input type="checkbox" id="Checkall" name="inputCheckall" checked οnclick="selectAll()">
                <p><i></i><span>全选</span></p>
            </div>
        </div>
        <ul id="checkUl">
            <li>
                <div class="checkbox act_checkbox">
                    <input type="checkbox" name="inputCheck" value="1">
                    <p><i></i><span>选项一</span></p>
                </div>
            </li>
            <li>
                <div class="checkbox">
                    <input type="checkbox" name="inputCheck" value="2">
                    <p><i></i><span>选项二</span></p>
                </div>
            </li>
            <li>
                <div class="checkbox">
                    <input type="checkbox" name="inputCheck" value="3">
                    <p><i></i><span>选项三</span></p>
                </div>
            </li>
            <li>
                <div class="checkbox">
                    <input type="checkbox" name="inputCheck" value="4">
                    <p><i></i><span>选项四</span></p>
                </div>
            </li>
        </ul>
        <p class="but_check"><button οnclick="submitCheck()">提交</button></p>
    </div>
</div>
<!-- CSS -->
.checkbox{
    position: relative;
}
.checkbox>input{
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    z-index: 10;
    cursor: pointer;
    height: 100%;
    opacity: 0;
}
.checkbox i{
    display: inline-block;
    width: 16px;
    height: 16px;
    border: 2px solid #ccc;
    border-radius: 2px;
    vertical-align: middle;
    margin-right: 5px;
    margin-top: -1px;
    position: relative;
}
.act_checkbox i{
    border-color: green;
}
.act_checkbox  i:after{
    content: '';
    position: absolute;
    top: 3px;
    left: 2px;
    width: 10px;
    height: 5px;
    border-left:3px solid green;
    border-bottom:3px solid green;
    transform: rotate(-45deg);
}
.all_checkbox{
    width: 100px;
    padding:20px;
    box-sizing: border-box;
}
.but_check{
    width: 100%;
    padding: 20px 0;
    text-align: center;
}
.but_check>button{
    padding: 5px 20px;
    background: dodgerblue;
    color: #fff;
    text-align: center;
    cursor: pointer;
    border: 0;
    outline:none;
    border-radius: 5px;
}
<!-- 效果 -->


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值