bootstrap無限級分類 jq拓展 之前的無限級分類的封裝版~


git地址:https://github.com/zhangjiahao93/jQ.select

HTML部分

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>多級聯動封裝</title>
    <link href="./css/bootstrap.css" rel="stylesheet">
    <script src="./js/jquery.js"></script>
    <script src="./js/duoji.js"></script>
</head>
<body>

<div class="row" style="margin:100px auto;">
    <div class="col-md-12" id="box"></div>  
</div>
<div class="row" style="margin:100px auto;">
    <div class="col-md-12" id="box2"></div>  
</div>

<script>
    //基礎用法
    $.select({boxName:'box'})
    //詳細配置
    $.select({
        boxName:'box2',
        className:'area2',
        url:'./area.php',
        type:'get',    
        dataType:'json',
    })
    
    /*
        boxName:'box',      //容器名
        className:'area',    //每個事件的定位class
        url:'./area.php',    //請求的地址
        type:'get',            //請求傳輸方式
        dataType:'json',    //使用jsonp方式
    */
    
</script>

</body>
</html>

 

duoji.js 代碼

(function ($) {
    $.select=function(config){
        var i=new select;
        return i.init(config)
    }
    //聲明多級聯動 方法類
    var select = new Function();
    select.prototype={
        //定義類屬性
        init:function(config){
            /**
             * 這些是預定義屬性
             */
            this.boxName='box';                //容器名
            this.className='area';          //每個事件的定位class
            this.url='./area.php';          //默認選項

            //this.classObj=$("."+className); //每個事件的定位class 的對象 --基本沒用所以廢除了
            this.type= 'get';                //傳輸方式
            this.dataType='json';             //使用jsonp方式
            
            //解包解出配置信息 覆蓋上面的屬性
            for(var key in config){
                this[key] = config[key];
                //console.log(key+':'+config[key]+' this.key:'+this.key);
            }
            //console.log(this.boxName);
            
            var boxName=this.boxName;
            this.box=$('#'+boxName);        //需要添加元素的容器
            
            //最后創建
            this.create();                    //新建一個select獲取 
        },
        
        create:function(){
            //聲明外部變量
            var boxName=this.boxName;
            var className= this.className;
            var box=this.box;
            var url=this.url;
            var obj=this;
            var type=this.type;
            var dataType=this.dataType;
            
            
            $.ajax({
              type: type,
              dataType:dataType,
              url: url,
              data: {id:'0'},
              sync: true,//設置異步模式
              success: function(data){
                var option="<option value=''>請選擇</option>";
                var list=data.data;
                for(var key in list){
                    option+="<option value='"+key+"'>"+list[key].areaname+"</option>";
                }
                $('<div class="col-md-2 pl0"><select name="'+className+'[]" num="0" class="form-control input-sm '+className+'">'+option+'</select></div>').appendTo(box).find('select').bind('change',function(){obj.change($(this))});
              }
           });
            
        },
        
        //change事件
        change:function(event){
            //聲明 

            var box =this.box;                    //獲取所有插入盒子的對象
            var className=this.className        //獲取模型的className
            
            var classObj=$('.'+className);        //獲取所有Class所在元素組 這里要在注意 重新生成classObj 因為他是動態的
            var num=classObj.index($(event))+1; //獲取num的值
            //console.log(classObj.index($(event)));
            
            var id=$(event).val();                //獲取ajax發送id的頭
            var obj=this;                        //代表這個方法            
            var url=this.url;                    //url地址            
            
            var type = this.type;                //傳輸方式
            var dataType=this.dataType;            //數據類型
            
            //清除 后續添加的新的元素
            classObj.each(function(){
                //console.log(event);
                //這里的this 代表eClass 遍歷時的單個對象
                if($(this).attr('num')>$(event).attr('num')){
                    $(this).parent().remove();
                }
            });

            //循環ajax方法
            $.ajax({
              type: type,
              dataType:dataType,
              url: url,
              data: {id:id},
              sync: true,//設置異步模式
              success: function(data){
                //console.log(data);
                var list =data.data
                if(data.state==='1'){
                    var option="<option value=''>請選擇</option>";
                    for(var key in list){
                        option+="<option value='"+key+"'>"+list[key].areaname+"</option>";
                    }
                    $('<div class="col-md-2 pl0"><select name="'+className+'[]" num="'+num+'" class="form-control input-sm '+className+'" >'+option+'</select></div>').appendTo(box).find('select').bind('change',function(){obj.change(this)});
                 }
              }
           });
           
        },
        
        //查詢當前盒子中的信息
        log:function(){
            var boxName=$(event).attr('pnode');  //獲取觸發事件者的pnode 
            var className=$(event).attr('cname');//獲取觸發事件者的cname
            var box =$("#"+boxName);            //獲取所有插入盒子的對象
            var className=$("."+className);        //獲取所有Class所在元素組
            console.log("容器名:"+boxName+"\n 觸發的class名:"+className);
            
        },
        
    }
    
})(jQuery)

 

后端提供的數據類型:json

如果有數據:state=1

例子:

data:{
110000:{id: "110000", areaname: "北京", pid: "0", shortname: "北京", level: "1", position: "tr_0", sort: "1"}
120000:{id: "120000", areaname: "天津", pid: "0", shortname: "天津", level: "1", position: "tr_0", sort: "2"}
130000:{id: "130000", areaname: "河北省", pid: "0", shortname: "河北", level: "1", position: "tr_0", sort: "3"}
140000:{id: "140000", areaname: "山西省", pid: "0", shortname: "山西", level: "1", position: "tr_0", sort: "4"}
150000:{id: "150000", areaname: "內蒙古自治區", pid: "0", shortname: "內蒙古", level: "1", position: "tr_0", sort: "5"}
.....
},
state:"1"

如果沒有數據 state=0

例子:

state:"0"

 

最后附上下載地址:包含php服務端的實例yo~

http://pan.baidu.com/s/1i5DG70D


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM