基本信息
源码名称:基于Jquery实现多选下拉的插件
源码大小:0.06M
文件格式:.rar
开发语言:js
更新时间:2021-05-05
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

  本插件基于JQuery插件标准开发,可以用来学习,项目中也可以用


;(function($){//;表示将前面的作为一个语句
	$.fn.multselect=function(options){//插件名称
        var defaults={
           url:"",//ajax请求数据 数据格式[{"id":"1","name":"张三"},{"id":"123","name":"李四"}]
           width:"330px",//div宽  必须是像素值
           disabled:false,//插件禁用
           panelHeight:"150px",//下拉画布高  auto
           onSelect:function(el){//选中回调函数
            
           },
           onEcho:[]//做回显  data格式[1,2,3,4,5]  select中的value

        }
        var options=$.extend(defaults,options);
        return this.each(function(){
          var uid="ui" new Date().getTime();//控件ID
          var body=$("body"),jqObj;
          var _this=$(this);
		  var position=_this.offset();
          var originObj={//获取select内容
              name:_this.attr("name"),//name属性
               //通过单选加载本地数据
              getOptions:function(){//获取options 值 value
                   var obj=[];//获取value ,值
                   _this.find("option").each(function(){
                   	 var value=this.value;
                   	 var html=this.innerHTML;
                   	 var o={};
                     o[value]=html;
                     obj.push(o);
                   })
                   return obj;
              }
		  };
		  var box_html="<div id='" uid "' class='multselect'><i class='icon-right'></i><div class='kid kid-t'><ul></ul></div></div>",
		      content_html="<span></span>",
		      submit_input="<input name='' style='display:none;' value=''></input>";		 
          var multselect={
          	   //初始化option
          	   _initial:function(){
          	  	   if (options.url!=""){//加载远程数据
          	     	    $.ajax({
                   	   	 url:options.url,
                   	   	 dataType:"json",
                   	   	 async:false,
                   	   	 success:function(data){
                   	   	 	if($.isArray(data)){
                   	   	 	   var h;
                               for(var i=0,j=data.length;i<j;i  ){
                                  h ='<option value="' data[i].id '">' data[i].name '</option>';
                               }
                               _this.append(h);
                               multselect.initHtml();
                   	   	 	}else{
                   	   	 		console.debug("数据格式错误");
                   	   	 	}
                   	   	 }
                   	   });
          	        }else if(_this.find("option").length>0){//加载本地数据
                         multselect.initHtml();
          	        }
          	   },
              initHtml:function(){//页面初始化控价
	                 _this.css({opacity:0});//select隐藏
	                 _this.after(box_html);
	                 jqObj=$("#" uid);                    
                     this.changeCSS(jqObj);
	                 /*获取ul中的li的集合*/
	                 var optionshtml="";
	                 var arr=[];//存储select中的value值 
	                 var _origin=originObj.getOptions();
	                 for(var i=0;i<_origin.length;i  ){
	                    var $key,$value;
	                 	for(var key in _origin[i]){
	                       $key=key;
	                       $value=_origin[i][key];
	                 	}
	                 	arr.push($key);
	                 	optionshtml ='<li data-id="' $key '">' $value '</li>';
	                 }
	                jqObj=multselect.setKidDiv_Zindex(jqObj);
	                 /*加载span input*/
	                 jqObj.append(content_html).append(submit_input);;
	                
	                 jqObj.find(".kid ul").append(optionshtml);//加载li集合

	                 //回显
	                 var data=options.onEcho;
	                 if(data&&$.isArray(data)){
	                 	 var text="";
                         for(var i=0;i<data.length;i  ){
                         	 if($.inArray(data[i],arr)=="-1"){//判断select value集合有无
                                  break;
                              }
                              var $li=jqObj.find("li[data-id='" data[i] "']");
                              $li.addClass("select");
                              text =text==""?$li.html():"," $li.html();
                         }
                         jqObj.find("span").html(text);
                         jqObj.find("input").val(data.join());
	                 }

	                 this.setEvents();//初始化事件集
 
                     if(options.disabled==true){//禁用
                        jqObj.unbind("click");
                        jqObj.addClass("disabled");
	                 }
	                },
              setEvents:function(){
              	     var event=this;
	                //鼠标单击加载active样式
	                 jqObj.delegate("li","click",function(){
	                 	var text=$(this).get(0).innerHTML;
	                    var id=$(this).data("id");
	                    if($(this).is(".select")){    
                            event.removeContentOptions($(this),id);
	                    }else{
	                    	event.addContentOptions($(this),text,id); 	
	                    }
	                    return false;
	                 });
	                 //单击展开下拉
	                 jqObj.bind("click",function(){
	                 	var kidBox=$(this).find(".kid");
	                 	if(kidBox.is(":hidden")){
	                 		kidBox.show();
	                 		$(this).addClass("mult-b");
	                 		$(this).find("i").removeClass().addClass("icon-bottom");  
	                 	}else{
	                 		kidBox.hide();
	                 		$(this).removeClass("mult-b");
	                 		$(this).find("i").removeClass().addClass("icon-right");  
	                 	}
	                 }),
	                 //鼠标移入移出
	                 jqObj.delegate("li","mouseover",function(){
	                 	$(this).addClass("active");
	                 }),
	                 jqObj.delegate("li","mouseleave",function(){
	                 	$(this).removeClass("active");
	                 }),
	                 //点击控件外进行收起控件  
	                 $(document).click(function(event){
                        body.find(".kid").hide();
                        jqObj.removeClass("mult-b");
	                    jqObj.find("i").removeClass().addClass("icon-right"); 
	                 });
	                 jqObj.click(function(event){
                        event.stopPropagation();
	                 });
              },
              //修改样式
              changeCSS:function(obj){
                     jqObj.css({
                     	"position":"absolute",
                     	"width":options.width,
                     	"top":position.top "px",
                     	"left":position.left "px",
                     	"z-index":0});
                     jqObj.find(".kid").css({
                     	"display":"none",
                      "overflow-y":"auto",
                     	"width":options.width,
                     	"height":options.panelHeight
                     });
              },
              //删除li 以及 span中内容
              removeContentOptions:function(obj,id){
                        obj.removeClass("select");
	                    jqObj.find("span").html(multselect.getContent());
	                 
	                    //设置input中value
	                    var val="";
	                    jqObj.find("li[class='select']").each(function(index,el){
                            var _id=$(el).data("id");
                            val =val==""?_id:"," _id;
	                    })
	                    jqObj.find("input").val(val);
              },
              //添加li 以及 span中内容
              addContentOptions:function(obj,text,id){
                       obj.addClass("select");
	                   jqObj.find("span").html(multselect.getContent());
	                   //设置input中value
	                    var val="";
	                    jqObj.find("li[class='select']").each(function(index,el){//选中第一个  input值没有???
                            var _id=$(el).data("id");
                            val =val==""?_id:"," _id;
	                    })
	                    jqObj.find("input").val(val);
	                    _this.find("option[value='" id "']").attr("selected","selected");
	                    //回调函数
	                    options.onSelect(_this);
              },
              //刷新页面显示内容
              getContent:function(){
              	       var content="";
                       jqObj.find("li").each(function(){
                          if ($(this).hasClass("select")) {
                            content =content==""?$(this).html():"," $(this).html();
                          }
                       });
                       return content;
              },

			  //解决两个下拉框重叠显示问题
			  setKidDiv_Zindex:function(jqObj){
			  	       var length=body.find(".multselect").length;
			  	       if(typeof length=='number'){
			  	       	   jqObj.css("z-index",$(document).height()-position.top);//通过高度加载 越高 值越大
			  	       }
			  	       return jqObj;
			  }
          };

          multselect._initial();
        })
	}
})(jQuery);