zoukankan      html  css  js  c++  java
  • 实现全选和取消全选

    点击“全选老大”实现全选,再次点击取消全选,以此类推。

    html代码是不变的:

    <div id="mycheckbox">
         <input type="checkbox" id="selectAll"><br>
         <input type="checkbox"><br>
         <input type="checkbox"><br>
         <input type="checkbox"><br>
         <input type="checkbox"><br>
    </div>
    <div id="anotherdiv">
         <input type="checkbox">
    </div>

    前几天在项目中我的做法是在js中定义一个变量,每点击一次selectAll这个变量自增1,然后通过判断这个变量的奇偶性来实现全选和取消全选。这样做有两个问题:

    1、使用这种变量自增1再进行判断的做法挺幼稚的,后面随着对jquery的慢慢接触可以换一种做法;

    2、实现全选如果这么做$("#mycheckbox input").attr("checked",true);而且网上的回答我看到的大多都是这种做法,但是这么做会有问题,当第三次点击selectAll时全选就会失效。经过进一步的百度,要这么做:$("#mycheckbox input").prop("checked",true);这么做是没有问题的。attr最好是对自定义的属性进行操作,prop则对其自身具备的固有属性进行操作。

    全选和取消全选取决于id为selectAll那个复选框的两个点击状态,想到可以用toggle解决,使全选和取消全选的实现代码在toggle中放两个函数切换实现,然而使用toggle后发现两个问题:绑定toggle事件的那个复选按钮在刷新页面后就一闪而过——这个问题百度了一下,据说是1.9之后删除了toggle,于是换了个1.7,果然toggle还是有用的,但是点击selectAll之后,其他的input全选倒是实现了,然而selectAll自己不是选中状态。为此做了一个测试:

    $(function(){
        $("#selectAll").toggle(function(){
            $("#mycheckbox input").prop("checked",true);
            alert($(this).is(":checked"));
        },function(){
            $("#mycheckbox input").prop("checked",false);
        })
    })

    点击selectAll后,自身是勾选状态的: 

    点击警告框的确定后,自身的勾选状态消失了:

      

    百度了这个问题的答案:这是因为toggle方法中阻止了缺省动作。jquery源码中toggle在注册click时调用了event.preventDefault(),这个函数是阻止缺省动作的。然而,点击selectAll的缺省动作就是自身状态变为选中,这个动作被toggle阻止,所以最终selectAll不是勾选状态。

    所以还是规规矩矩使用click实现吧

    $(function(){
        $("#selectAll").bind('click',function(){
            var $allSelect = $("#mycheckbox input");
            // 如果selectAll为选中状态
            if($(this).is(":checked")){
                $allSelect.prop('checked',true);
            }
            else {
                $allSelect.prop('checked',false);
            }
        })
    })

     当第一次点击selectAll时,就已经是选中状态了,逻辑不要搞错了。

  • 相关阅读:
    exit()和_exit()的比较(与前一篇日志行缓冲区有关)
    标准IO缓冲详解全缓冲、行缓冲、不缓冲
    windows与unix/linux下输入回车换行的区别
    strtok()的用法
    头文件的处理
    feof()出现的问题及解决办法
    测试题
    视觉十四讲:第十二讲_八叉树地图
    树莓派4B安装OPENCV4.0
    编译OpenCV以及openc_contrib提示缺少boostdesc_bgm.i文件出错的解决
  • 原文地址:https://www.cnblogs.com/junsoo-jun/p/5933123.html
Copyright © 2011-2022 走看看