• 实现checkbox的全选/全不选/点选/行内点选(原生JS版和jQ版)


    转载自 一款比较实用齐全的jQuery表单验证插件@Mr.Think

    日常项目中, 对于列表类文章或数据, 大概都会用到checkbox的全选或全不选的功能, 以前的项目中也写过checkbox的选择js, 但都没有整理过. 正好前几天一个兄弟遇到了这个问题, 索性, 我花了点时间, 用原生JS与jQuery分别写了一个版本, 考虑到使用时灵活性问题, 未封装, 需要的童鞋使用时自行改下相关参数.

    功能介绍  点此查看DEMO
    1. 全选/全不选 选框一体实现, 即列表中选框的状态与全选/全不选框前的选框状态一致;
    2. 自动更改 全选/全不选 选框的状态, 即列表中选框都选中时, 全选/全不选 选框也选中, 反之亦然;
    3. 列表行内点击也可选中行内的checkbox, 并与1,2中的功能联动.

    JS代码:

    var js_chk = document.forms['js'].chk_can;
    var jsitems = document.forms['js'].jsitems;
    var jsrows = document.getElementById('js').getElementsByTagName('dd');

    //判断选中个数与实际选框个数实现全选/全不选框的状态
    var chk_canle = function(){
        var checkedLen = 0;
        //计算列表中选中状态的选框个数
        for (var m = 0; m < jsitems.length; m++) {
            if (jsitems[m].checked) {
                checkedLen += 1;
            }
        }
        //判断选中个数与实际个数是否相同,以确定全选/全不选状态
        for (var m = 0; m < js_chk.length; m++) {
            js_chk[m].checked = (jsitems.length == checkedLen);
        }
    }

    //全选与全不选一体实现
    for (var i = 0; i < js_chk.length; i++) {
        js_chk[i].onclick = function(){
            //列表中选框与全选选框统一状态
            for (var m = 0; m < jsitems.length; m++) {
                jsitems[m].checked = this.checked;
            }
            //全选选框统一状态
            for (var m = 0; m < js_chk.length; m++) {
                js_chk[m].checked = this.checked;
            }
        }
    }

    //列表中选框点击
    for (var i = 0; i < jsitems.length; i++) {
        jsitems[i].onclick = function(e){
            //阻止冒泡,避免行点击事件中,直接选择选框无效
            e && e.stopPropagation ? e.stopPropagation() : window.event.cancelBubble=true;
            chk_canle();
        }
    }

    //行内点击
    for (var i = 0; i < jsrows.length; i++) {
        jsrows[i].onclick = function(){
            //行内点击时,行内的选框状态为原状态取反
            this.getElementsByTagName('input')[0].checked = !this.getElementsByTagName('input')[0].checked;
            chk_canle();
        }
    }

     JQuery版本代码:

    var _jq_chk = $('#jq>dl>dt>label>:checkbox');
    var _jqitems = $(':checkbox[name=jqitems]');
    var _rows = $('#jq>dl>dd');

    //全选与全不选一体实现
    _jq_chk.click(function(){
        //列表中选框和全选选框统一状态
        _jqitems.add(_jq_chk).attr('checked', this.checked);
    });

    //选框的点击事件
    _jqitems.click(function(e){
        //阻止冒泡,避免行点击事件中,直接选择选框无效
        e.stopPropagation();
        //判断选中个数与实际个数是否相同,以确定全选/全不选状态
        _jq_chk.attr('checked', _jqitems.size() == _jqitems.filter(':checked').size());
    });

    //点选行时选中行内的checkbox
    _rows.bind({
        mouseenter: function(){
            $(this).addClass('hover');
        },
        mouseleave: function(){
            $(this).removeClass('hover');
        },
        //点选
        click: function(){
            //行内点击时,行内的选框状态为原状态取反
            $(this).find(':checkbox').attr('checked', !$(this).find(':checkbox').get(0).checked)
            //判断选中个数与实际个数是否相同,以确定全选/全不选状态
            _jq_chk.attr('checked', _jqitems.size() == _jqitems.filter(':checked').size());
        }
    });

     具体的实现可以参考本文提供的Demo!

  • 相关阅读:
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Maximum Depth of Binary Tree
    Sharepoint 2013 创建TimeJob 自动发送邮件
    IE8 不能够在Sharepoint平台上在线打开Office文档解决方案
    TFS安装与管理
    局域网通过IP查看对方计算机名,通过计算机名查看对方IP以及查看在线所有电脑IP
    JS 隐藏Sharepoint中List Item View页面的某一个字段
    SharePoint Calculated Column Formulas & Functions
    JS 两个一组数组转二维数组
  • 原文地址:https://www.cnblogs.com/jsonzheng/p/2239142.html
Copyright © 2020-2023  润新知