HTML+JS实现左边选择到右边
工作中遇到一个需求,产品报告里面包含一些原材料的报告,因此在添加产品报告的时候要选择一些原材料报告进来,这样就有了一个多选选择进来,如果把所有的原材料列出来是不合理的实现 像下图这样,原料名称是多选 而且备选有很多。网上找了一个多选左边选择到右边然后确定就可以的。感觉代码比较多,个人代码洁癖所以就自己用js+html写了一个。底部有打包链接地址

在此记录 样式如图

然后是代码:
select.html:主要是左中右三栏 左边备选项,中间是几个命令按钮,右边是已经选择的项目。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HTML+JS实现左边选择到右边</title>
<link rel="stylesheet" href="select.css" type="text/css">
<script src="/public/js/jquery.min.js"></script>
<script src="select.js"></script>
</head>
<body>
<button onclick="getOptions()" style="">添加选择</button>
<ol class="forminfo"></ol>
<div class="selectBg"></div>
<div class="selectBody">
<div class="selectLeft">
<input type="text" id="leftInput" class="dfinput" onchange="searchOptions(this.value)" onkeyup="searchOptions(this.value)" placeholder="这里用ajax动态检索展示下面列表">
<ul>
<li data-id="1">第一项选择</li>
<li data-id="2">第2项选择</li>
<li data-id="3">第3项选择</li>
<li data-id="4">第4项选择</li>
<li data-id="5">第5项选择</li>
<li data-id="6">第6项选择</li>
<li data-id="7">第7项选择</li>
<li data-id="8">第8项选择</li>
<li data-id="9">第9项选择</li>
<li data-id="10">第10项选择</li>
</ul>
</div>
<div class="selectMid">
<ul>
<li><i class="fa fa-angle-right" onclick="addSelected()"> > </i></li>
<li><i class="fa fa-angle-left" onclick="removeSelected()"> < </i></li>
<li><i class="fa fa-angle-double-right" onclick="addAll()"> >> </i></li>
<li><i class="fa fa-angle-double-left" onclick="removeAll()"> << </i></li>
</ul>
</div>
<div class="selectRight">
<div style="text-align: center; font-size: 16px; font-weight: bold;margin-top: 10px;">已选列表</div>
<ul></ul>
<div style="position: absolute; bottom: 10px; right:10px ">
<button class="btn btn-small btn-info" onclick="setOptions()">确定</button>
<button class="btn btn-small btn-danger" onclick="cancelOptions()">取消</button>
</div>
</div>
</div>
<script>
var selectedList = new Array();
var options = [ //这里是已经选择好了的项目
{id:1,name:'第一项选择'}
];
</script>
</body>
</html>select.css 规定样式
.selectBg{width:100%; height:100%; position:fixed; left:0; top:0; background:rgba(0,0,0,0.4);z-index: 100; display:none;}
.selectBody{width:600px;height:400px; border:1px solid #dedede; background:#fff; position:absolute; left:50%; margin-left:-300px; top:50%;margin-top:-200px;z-index: 110;display:none}
.selectBody .selectLeft{width:279px;height:400px; border-right:1px solid #dedede;float:left;}
.selectBody .selectRight{width:279px;height:400px; border-left:1px solid #dedede;float:left;}
.selectBody .selectMid{width:40px;height:400px;float:left;}
.selectLeft ul{margin:10px; height:300px; overflow-y:auto; line-height:180%;}
.selectLeft li{padding:0 10px;cursor: default;}
.selectLeft li.selected{background:#0b6cbc;color:#ffffff;}
.selectRight ul{margin:10px; height:300px; overflow-y:auto; line-height:180%;}
.selectRight li{padding:0 10px;cursor: default;}
.selectRight li.selected{background:#0b6cbc;color:#ffffff;}
.selectMid ul{margin-top:100px; padding: 0px;}
.selectMid li{border:1px solid #CCE0FF;padding:0;list-style:none;-webkit-border-radius: 3px;-moz-border-radius: 3px;border-radius: 3px;width: 26px ;height: 26px;text-align: center; font-size: 16px;margin:10px auto;}
.selectMid li i{display:block;line-height: 24px;cursor:pointer;}
.selectBody button{padding:0 5px; height:auto;}
.dfinput{border:1px solid #dedede; width:274px; height:30px; line-height: 30px; text-indent:5px}
ul li{padding:0; list-style:none;}然后是select.js动作 其中ajax部分自己再完善吧 只为了演示效果没有ajax交互了。
// 将默认的选项载入并且显示选择框
function getOptions(){
selectedList = options;
var len=selectedList.length;
$(".selectRight ul").html('');
for(j = 0; j < len; j++) {
var _option = selectedList[j];
html = "<li data-id='"+_option.id+"'>"+_option.name+"</li>";
$(".selectRight ul").append(html);
}
$(".selectBg").fadeIn();
$(".selectBody").fadeIn();
}
// 取消选择
function cancelOptions(){
$(".selectBg").fadeOut();
$(".selectBody").fadeOut();
}
// 手动选择到右侧
function addSelected(){
$(".selectLeft li.selected").each(function(){
var _option = new Object();
_option.id = $(this).data("id");
_option.name = $(this).text();
if(selectedList.find(item=>item.id == _option.id)){
}else{
selectedList.push(_option);
html = "<li data-id='"+_option.id+"'>"+_option.name+"</li>";
$(".selectRight ul").append(html);
$(this).removeClass("selected");
}
});
}
// 全部备选项选择到右侧
function addAll(){
$(".selectLeft li").each(function(){
var _option = new Object();
_option.id = $(this).data("id");
_option.name = $(this).text();
if(selectedList.find(item=>item.id == _option.id)){
}else{
selectedList.push(_option);
html = "<li data-id='"+_option.id+"'>"+_option.name+"</li>";
$(".selectRight ul").append(html);
}
});
}
// 移除已选项
function removeSelected(){
$(".selectRight li.selected").each(function(){
var _option = new Object();
_option.id = $(this).data("id");
_option.name = $(this).text();
thisObj = selectedList.find(item=>item.id == _option.id);
if(thisObj){
var index = selectedList.indexOf(thisObj);
if (index > -1) {
selectedList.splice(index, 1);
}
}
$(this).remove();
});
}
// 移除全部已选
function removeAll(){
$(".selectRight li").each(function(){
var _option = new Object();
_option.id = $(this).data("id");
_option.name = $(this).text();
thisObj = selectedList.find(item=>item.id == _option.id);
if(thisObj){
var index = selectedList.indexOf(thisObj);
if (index > -1) {
selectedList.splice(index, 1);
}
}
$(this).remove();
});
}
// 选择的项目状态切换
$(document).on("click",".selectLeft li",function(){
if($(this).hasClass("selected")){
$(this).removeClass("selected")
}else{
$(this).addClass("selected")
}
});
$(document).on("click",".selectRight li",function(){
if($(this).hasClass("selected")){
$(this).removeClass("selected")
}else{
$(this).addClass("selected")
}
});
//服务端获取备选项
function searchOptions(str=''){
$.ajax({
type:"POST",//POST GET
url:"url",
data:{keyword:str},
dataType: "json",//"xml", "html", "script", "json", "jsonp", "text".
success:function(data){
$(".selectLeft ul").html(data.html);
},
error: function(){}
});
}
// 将已选的项目载入到form表单中 隐藏选择框
function setOptions(){
options = selectedList;
var len=selectedList.length;
var html = '';
for(i = 0; i < len; i++) {
var _option = selectedList[i];
html += "<li><input type='hidden' name='son_id[]' value='" +_option.id + "'>" +
_option.name +
"<i class='fa fa-times'></i></li>";
}
$("ol.forminfo ").html(html);
$(".selectBg").fadeOut();
$(".selectBody").fadeOut();
}这里是我打包带走的链接 select_left_to_right.rar