input全选与单选(把相应的value放入隐藏域去)

需求是: 页面上有很多复选框,1.当我选择一项复选框时候 把对应的值放入到隐藏域去 2.当我反选的时候 把隐藏域对应的值删掉。3.当我全选的时候 页面上所有的选择框的值一起放到隐藏域去,反之。4.当我已全选时候 再删掉选择一项时候 只是把对应的一项值删掉。

  当我全选的时候:

    对应于

   当我没有全选的时候 

   对应于 

   HTML代码如下:

  

<div class="container">
        <div>全选<input type="checkBox" class="AllSelect"/></div>
        <div>
            <label><input type="checkbox" value="201399720559172" class="selector"/></label>
            <label><input type="checkbox" value="201399720559173" class="selector"/></label>
            <label><input type="checkbox" value="201399720559174" class="selector"/></label>
        </div>
    </div>
    <input id="boxFrom" type="hidden" value=""/>

JS代码如下:

  

var callback = (function(){

            function CheckBox(container){
                var self = this;
                
                if(this instanceof CheckBox) {

                    // 匹配传参数clickElem
                    if($.isPlainObject(container)){
                        this.container = container;
                    }else if(/^\./.test(container)){
                        this.container = $(container);
                    }else if(/^#/.test(container)){
                        this.container = $(container);
                    }else if($(‘.‘+container)){
                        this.container = $(‘.‘+container);
                    }else {
                        throw new Error(‘传递参数不符合!‘);
                    }
                }else {
                    new CheckBox(container);
                }
                
                $(this.container).click(function(e) {
                    var target = e.target;
                    if(target.type === ‘checkbox‘ && $(target).hasClass(‘selector‘)) {
                        self.itemSelect(target);
                    }else if (target.type === ‘checkbox‘ && $(target).hasClass(‘AllSelect‘)) {
                        self.allSelect(target);
                    }else {
                        new Error(‘没有找到相应的选项!‘);
                    }
                });
            }

            CheckBox.prototype = {

                constructor: CheckBox,

                _count: 0, // 计数器

                _arr: [],

                _itemArrs: [],

                _selectLen: $(‘.selector‘).length,

                itemSelect: function(target){
                    var self = this,
                        itemVal;
                    if(target.checked){
                        target.checked = true;
                        self._count++;
                        
                        // 当选中最后一个时候 全选复选框也选择上 
                        if(self._count >= self._selectLen) {
                            $(‘.AllSelect‘).attr(‘checked‘,true);
                        }
                        itemVal = $(target).attr(‘value‘);
                        
                        self._arr.push(itemVal);
                        
                        self.request(self._arr);
                    }else {
                        target.checked = false;
                        
                        if(self._count <= 0){
                            self._count = 0;
                        }else {
                            self._count--;
                        }
                        if(self._count < self._selectLen) {
                            $(‘.AllSelect‘).attr(‘checked‘,false);
                        }
                        itemVal = $(target).attr(‘value‘);
                        if(self._arr.length > 0) {
                            for(var i = 0, ilen = self._arr.length; i < ilen; i+=1) {
                                if(itemVal == self._arr[i]) {
                                    self.removeItem(self._arr[i],self._arr);
                                }
                            }
                        }
                        var curVal = self.unique(self._arr);
                        $(‘#boxFrom‘).attr(‘value‘,curVal);
                    }    
                },
                // 索引 jquery1.8 indexof 会重新排序 所以没有用jquery indexof
                indexOf: function(item,arr) {
                    if(Array.prototype.indexOf) {
                        return arr.indexOf(item);
                    }else {
                        for(var i = 0, ilen = arr.length; i < ilen; i+=1) {
                            if(arr[i] == item) {
                                return i;
                            }else {
                                return -1;
                            }
                        }
                    }
                },
                // 从数组里面删除一项
                removeItem: function(item,arr){
                    var self = this,
                        index = self.indexOf(item,arr);
                    if(index > -1) {
                        arr.splice(index, 1);
                    }
                },
                
                // 全选
                allSelect: function(target){
                    var self = this;
                    if(target.checked) {
                        $(‘.selector‘).each(function(index,item){
                            item.checked = true;
                            var itemVal = $(item).attr(‘value‘);
                            self._arr.push(itemVal);
                        });
                        self.request(self._arr);
                    }else {
                        target.checked = false;
                        $(‘#boxFrom‘).attr(‘value‘,‘‘);
                        $(‘.selector‘).each(function(index,item){
                            item.checked = false;
                            self._count = 0;
                            self._arr = [];
                        });
                    }
                },
                
                //去掉数组重复项
                unique: function(arr){
                    arr = arr || [];
                    var obj = {},
                        ret = [];
                    for(var i = 0, ilen = arr.length; i < ilen; i+=1) {
                        var curItem = arr[i],
                            curItemType = typeof(curItem) + curItem;
                        if(obj[curItemType] !== 1) {
                            ret.push(curItem);
                            obj[curItemType] = 1;
                        }
                    }
                    return ret;
                },

                // 处理业务逻辑
                request: function(arr){
                    var self = this;
                    if($.isArray(arr)){
                        var arr = self.unique(arr);
                        $(‘#boxFrom‘).attr(‘value‘,arr.join(‘,‘));
                    }else {
                        $(‘#boxFrom‘).attr(‘value‘,arr);
                    }
                }
            };

            return CheckBox;
        })();
        

        //调用如下
        new callback(‘.container‘);
 


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。