实例介绍
【实例简介】
【实例截图】
【核心代码】
本插件基于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);
【核心代码】
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论