在网上看到一个下拉浮层效果。具体URL如下,请尊重原来作者版权哦。
http://www.xwcms.net/webAnnexImages/fileAnnex/20131214/41231/xwcms.html
但是这个效果里面,我发现没有全选按钮,我研究了代码一个下午,经过试验成功加入了,全选按钮。具体添加部分如下:
在jquery.selectlayer.js文件中:
//清空
$(showid+" .selecteditem .empty").unbind().click(function()
{
$(showid+" .selecteditem").css("display","none");
$(showid+" .selecteditem").html("");
$(showid+" :checkbox[checked]").parent().css("color","");
$(showid+" :checkbox[checked]").parent().parent().prev().css("color","");
$(showid+" :checkbox[checked]").attr('checked',false);
SetBoxBg(showid);
//实现全选
$(showid+" .OpenFloatBox .a").attr('checked',false);
});
在$(objid).click(function()实现,全选按钮事件实现如下:
//全选
$(showid+" .OpenFloatBox .a").unbind().click(function()
{
is_all_select=!is_all_select;
if(is_all_select){
//alert("全部选中");
$(showid+" .OpenFloatBox .b").attr('checked',true);
CopyItem(showid);
}else{
//alert("全部没有选中");
$(showid+" .selecteditem").css("display","none");
$(showid+" .selecteditem").html("");
$(showid+" :checkbox[checked]").parent().css("color","");
$(showid+" :checkbox[checked]").parent().parent().prev().css("color","");
$(showid+" :checkbox[checked]").attr('checked',false);
SetBoxBg(showid);
}});
拷贝函数中补充如下:
//拷贝
function CopyItem(showid){
var htmlstr='
已经选择分类:[清空已选]
';
$(showid+" .item :checkbox[checked][class='b']").each(function(index){
htmlstr+="";
})
$(showid+" .item :checkbox[checked][class='s']").each(function(index){
if ($(this).parent().parent().prev().find(":checkbox").attr('checked')==false)
{
htmlstr+="";
}
})
htmlstr+="";
$(showid+" .selecteditem").html(htmlstr);
if ($(showid+" .item :checkbox[checked]").length>0){
$(showid+" .selecteditem").css("display","block");
}else{
$(showid+" .selecteditem").css("display","none");
}
//已选项目绑定click
$(showid+" .selecteditem :checkbox").unbind().click(function(){
var selval=$(this).val();
$(showid+" .item :checkbox[checked]").each(function()
{
if ($(this).val()==selval)
{
$(this).attr("checked",false);
if ($(this).attr("class")=="b")
{
$(this).parent().next().find(":checkbox").attr("checked",false);
//实现全选
if(is_all_select){
$(showid+" .OpenFloatBox .a").attr('checked',false);
is_all_select=false;
}
}
//重新克隆
CopyItem(showid);
}
})
});
添加全局变量如下:
var is_all_select=false;
全部JS文件代码如下:
//职位,地区选择弹出层函数
var is_all_select=false;
function OpenCategoryLayer(objid,showid,input_cn,input,QSarr,strlen)
{
$(objid).click(function()
{$(this).blur();
$(this).parent("div").before("");
$(".menu_bg_layer").height($(document).height());
$(".menu_bg_layer").css({ width: $(document).width(), position: "absolute",left:"0", top:"0","z-index":"0","background-color":"#000000"});
$(".menu_bg_layer").css("opacity",0);
$(showid+" .OpenFloatBoxBg").css("opacity", 0.2);
$(showid).show();
$(showid+" .OpenFloatBox").css({"left":($(document).width()-$(showid+" .OpenFloatBox").width())/2,"top":"120","z-index":"999"});
SetBoxBg(showid);
$(showid+" .item").unbind().hover(
function(){
$(this).find(".titem").addClass("titemhover");
var strclass=QSarr[$(this).attr("id")];
var pid=$(this).attr("id");
if (strclass)
{
$(this).find(".sitem").css("display","block");
if ($(this).find(".sitem").html()=="")
{
$(this).find(".sitem").html(MakeLi(strclass,pid));
//生成LI
}
}
$(showid+" .OpenFloatBox label").unbind().click(function()
{
if ($(this).attr("title"))
{
if ($(this).find(":checkbox").attr('checked'))
{
$(this).next().find(":checkbox").attr('checked',true);
}
else
{
$(this).next().find(":checkbox").attr('checked',false);
}
}
else
{
if ($(this).parent().find(":checkbox[checked]").length>0)
{
$(this).parent().prev().find(":checkbox").attr('checked',false);
}
}
CopyItem(showid);
});
},
function(){
$(this).find(".titem").removeClass("titemhover");
$(this).find(".sitem").css("display","none");
}
);
$(showid+" .OpenFloatBox .DialogClose").unbind().hover(function(){$(this).addClass("spanhover")},function(){$(this).removeClass("spanhover")});
$(showid+" .DialogClose").click(function(){DialogClose(showid);
});
//确定选择
$(showid+" .Set").unbind().click(function()
{
SetInput(showid,input_cn,input,strlen);
});
//全选
$(showid+" .OpenFloatBox .a").unbind().click(function()
{
is_all_select=!is_all_select;
if(is_all_select){
//alert("全部选中");
$(showid+" .OpenFloatBox .b").attr('checked',true);
CopyItem(showid);
}else{
//alert("全部没有选中");
$(showid+" .selecteditem").css("display","none");
$(showid+" .selecteditem").html("");
$(showid+" :checkbox[checked]").parent().css("color","");
$(showid+" :checkbox[checked]").parent().parent().prev().css("color","");
$(showid+" :checkbox[checked]").attr('checked',false);
SetBoxBg(showid);
}});
//关闭
function DialogClose(showid)
{
$(".menu_bg_layer").hide();
$(showid).hide();
}
//设置表单
function SetInput(showid,input_cn,input,strlen)
{
var a_cn=new Array();
var a_id=new Array();
var i=0;
/**
if ($(showid+" .OpenFloatBox .selecteditem :checkbox[checked]").length>8)
{
alert("不能超过8个选项");
return false;
}
*/
$(showid+" .OpenFloatBox .selecteditem :checkbox[checked]").each(function(index)
{
a_cn[index]=$(this).attr("title");
if ($(this).attr("class")=="b")
{
a_id[i]=$(this).val()+".0";
}
else
{
a_id[i]=$(this).attr("id")+"."+$(this).val();
}
i++;
});
$(input_cn).val(limit(a_cn.join("+"),strlen));
if ($(input_cn).val()=="")$(input_cn).val("未选择");
$(input).val(a_id.join("-"));
DialogClose(showid);
} });
}
//设置阴影
function SetBoxBg(showid)
{
var FloatBoxWidth=$(showid+" .OpenFloatBox").width();
var FloatBoxHeight=$(showid+" .OpenFloatBox").height();
var FloatBoxLeft=$(showid+" .OpenFloatBox").offset().left;
var FloatBoxTop=$(showid+" .OpenFloatBox").offset().top;
$(showid+" .OpenFloatBoxBg").css({display:"block",width:(FloatBoxWidth+12)+"px",height:(FloatBoxHeight+12)+"px"});
$(showid+" .OpenFloatBoxBg").css({left:(FloatBoxLeft-5)+"px",top:(FloatBoxTop-5)+"px"});
}
//生成小类
function MakeLi(val,pid){
if (val=="")return false;
arr=val.split("|");
var htmlstr='';
for (x in arr)
{
var v=arr[x].split(",");
htmlstr+="
";
}
return htmlstr;
}
//拷贝
function CopyItem(showid){
var htmlstr='
已经选择分类:[清空已选]
';
$(showid+" .item :checkbox[checked][class='b']").each(function(index){
htmlstr+="";
})
$(showid+" .item :checkbox[checked][class='s']").each(function(index){
if ($(this).parent().parent().prev().find(":checkbox").attr('checked')==false)
{
htmlstr+="";
}
})
htmlstr+="";
$(showid+" .selecteditem").html(htmlstr);
if ($(showid+" .item :checkbox[checked]").length>0){
$(showid+" .selecteditem").css("display","block");
}else{
$(showid+" .selecteditem").css("display","none");
}
//已选项目绑定click
$(showid+" .selecteditem :checkbox").unbind().click(function(){
var selval=$(this).val();
$(showid+" .item :checkbox[checked]").each(function()
{
if ($(this).val()==selval)
{
$(this).attr("checked",false);
if ($(this).attr("class")=="b")
{
$(this).parent().next().find(":checkbox").attr("checked",false);
//实现全选
if(is_all_select){
$(showid+" .OpenFloatBox .a").attr('checked',false);
is_all_select=false;
}
}
//重新克隆
CopyItem(showid);
}
})
});
$(showid+" .OpenFloatBox .item label :checkbox").parent().css("color","");
$(showid+" .OpenFloatBox .item label :checkbox[checked]").parent().css("color","#FF6600");
$(showid+" .OpenFloatBox .sitem :checkbox[checked]").each(function(index){
$(this).parent().parent().prev().css("color","#FF6600");
});
SetBoxBg(showid);
//清空
$(showid+" .selecteditem .empty").unbind().click(function()
{
$(showid+" .selecteditem").css("display","none");
$(showid+" .selecteditem").html("");
$(showid+" :checkbox[checked]").parent().css("color","");
$(showid+" :checkbox[checked]").parent().parent().prev().css("color","");
$(showid+" :checkbox[checked]").attr('checked',false);
SetBoxBg(showid);
//实现全选
$(showid+" .OpenFloatBox .a").attr('checked',false);
});
}
//截取字符
function limit(objString,num)
{
var objLength =objString.length;
if(objLength > num){
return objString.substring(0,num) + "...";
}
return objString;
}
前端HTML页面改动如下:
只需要修改div class tip层。全部HTML就不复制了。
希望我的研究可以给原作添砖加瓦,能够得到更多分享。同时致敬原作者。
【JS|下拉多选框的改进,如何加入全选按钮】
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验