zoukankan      html  css  js  c++  java
  • checkbox 全選、取消全選、反選

    在寫一個全選、取消全選、反選的功能時。

    未來元素[type='checkbox'],在使用了jquery-1.11.1.min.js版本的jquery時:

    功能版本1:

    存在的問題,當使用了attr時,出現,這個操作的未來元素只能點擊第一次有效,即是說,當刷新頁面,我點擊選中,可以選中,點擊取消全校可以取消,點擊反選,可以反選,但是如果再次點擊,那麼該功能消失。so,這個版本X掉。

    jQuery.extend({
            /*select all  type eq 1// select none type eq 2// select reverse type eq 3*/
            ZellSelectDescript: function (id,type,obj) {
                /*the obj is the elements which use=>type is object*/
                var defaults = {
                    "checkElem":"#layer-table-collect .select-collect-file"
                }
                ,options = $.extend(defaults,obj);
                $(document).on("click",id,function () {
                    var $this = $(this),chk=$(options.checkElem);
                    if(chk.length>0) {
                        switch(type) {
                            case 1:/*all*/
                                chk.attr("checked","checked");
                                break;
                            case 2:/*none*/
                                chk.removeAttr("checked");
                                break;
                            case 3:/*inverse*/
                               chk.each(function (){
                      var _s = $(this);
                      _s.attr("checked",!_s.is(":checked"));
                    })
                                break;
                            default:/*all*/
                                for(var i=0,len=chk.length;i<len;++i) {
                                    chk[i].checked = true;
                                }
                        }    
                    }else{
                        return false;
                    }
                })
            }
      })

    造成上面問題的原因是,我使用的jquery-1.11.1.min.js這個版本,goggle&baidu瞭解,修改checkbox的checked屬性,使用prop,用法和attr同;

    so,該功能版本2爲:

    jQuery.extend({
            /*select all  type eq 1// select none type eq 2// select reverse type eq 3*/
            ZellSelectDescript: function (id,type,obj) {
                /*the obj is the elements which use=>type is object*/
                var defaults = {
                    "checkElem":"#layer-table-collect .select-collect-file"
                }
                ,options = $.extend(defaults,obj);
                $(document).on("click",id,function () {
                    var $this = $(this),chk=$(options.checkElem);
                    if(chk.length>0) {
                        switch(type) {
                            case 1:/*all*/
                                chk.prop("checked","checked");
                                break;
                            case 2:/*none*/
                                chk.removeProp("checked");
                                break;
                            case 3:/*inverse*/
                               chk.each(function (){
                      var _s = $(this);
                      _s.prop("checked",!_s.is(":checked"));
                    })
                                break;
                            default:/*all*/
                                for(var i=0,len=chk.length;i<len;++i) {
                                    chk[i].checked = true;
                                }
                        }    
                    }else{
                        return false;
                    }
                })
            }
      })

    經過測試,代碼可以在IE,火狐下正常使用了,但是尼瑪,谷歌下不能使用。看來出現兼容性問題。

    還是用原生js吧,試試...

    最終兼容代碼,功能版本3

    jQuery.extend({
            /*select all  type eq 1// select none type eq 2// select reverse type eq 3*/
            ZellSelectDescript: function (id,type,obj) {
                /*the obj is the elements which use=>type is object*/
                    var defaults = {
                    "checkElem":"#layer-table-collect .select-collect-file"
                }
                ,options = $.extend(defaults,obj);
                $(document).on("click",id,function () {
                    var $this = $(this),chk=$(options.checkElem);
                    if(chk.length>0) {
                        switch(type) {
                            case 1:/*all*/
                                for(var i=0,len=chk.length;i<len;++i) {
                                    chk[i].checked = true;
                                }
                                break;
                            case 2:/*none*/
                                for(var i=0,len=chk.length;i<len;++i) {
                                    chk[i].checked = false;
                                }
                                break;
                            case 3:/*inverse*/
                                for(var i=0,len=chk.length;i<len;++i) {
                                    chk[i].checked = !chk[i].checked;
                                }
                                break;
                            default:/*all*/
                                for(var i=0,len=chk.length;i<len;++i) {
                                    chk[i].checked = true;
                                }
                        }    
                    }else{
                        return false;
                    }
                })
            }
        })

    終於可以使用了,我把這個功能添加到jquery全局函數中。

    //調用方法:

    $.ZellSelectDescript("#collect-all-btn",1);/*全選*/
    $.ZellSelectDescript("#collect-none-btn",2);/*全不選*/
    $.ZellSelectDescript("#collect-inverse-btn",3);/*反選*/

    因爲jQuery的版本並沒有向下兼容,所以我們在使用Jquery的時候,最好翻翻對應的手冊,還有就是多百度,多google。

  • 相关阅读:
    eclipse插件开发:创建向导和导航器配置
    eclipse插件开发:属性视图
    标识出下列SQL语句的执行先后顺序
    webapi和webservice的本质区别
    某仪表上市公司.net-————Sql面试题
    Asp.net MVC 用EF来保存高精度小数时会碰到保留4位小数时,后两位默认为0的解决方法
    Asp.net MVC 集成AD域认证
    jquery zTree插件 json 数据详解
    模板列传值到子窗体中,子窗体中多选gridview中checkbox保存数据多项到数据库中
    asp.net comp雷达图
  • 原文地址:https://www.cnblogs.com/Zell-Dinch/p/4222796.html
Copyright © 2011-2022 走看看