多选select实现左右添加删除
案例:实现效果
1.选择监控城市,车辆列表显示对应城市所有车辆
2.从左边选择车辆 单击 >> 实现右侧显示添加车辆 ,左侧对应移除已选择车辆
3.右侧选中车辆 单击 << 实现右侧移除车辆信息,左侧显示对应移除过来的车辆

逻辑实现:
1.监控城市 select 添加 onchange事件函数,获取城市value 利用Ajax调取数据,通过回调函数 创建options填充 车辆列表 options
<div class="form-group" id="test1" >
<label class="col-sm-2 control-label">监控城市:</label>
<div class="col-sm-2">
<select class="form-control" name="region_group[]" multiple="multiple" id="region_0" onChange="getCars(this)" >
{foreach from=$cities item='city'}
<option value="{$city.city}">{$city.region_name}</option>
{/foreach}
</select>
<span id="regionSpan"></span> </div>
</div>
getCars()函数
function getCars(region_id) {
var region_id=[];
var obj = document.getElementById("region_0");
for(var i=0;i<obj.options.length;i++){
if(obj.options[i].selected){
region_id.push(obj.options[i].value);// 收集选中项
}
}
document.getElementById("carSpan").innerHTML = '';
Ajax.call('?is_ajax=1&act=getCars', 'region_id=' + region_id,selectCarCallback, 'POST', 'JSON') ;
}
selectCarCallback回调函数:
function selectCarCallback(res, ss) {
var board = document.getElementById("carSpan");
if(res.content.obj.length==0){
return ;
}
for (a in res.content.obj) {
if(a=="toJSONString")
continue ;
var e3 = document.createElement("option");
e3.innerHTML=res.content.obj[a].id+"       "+
res.content.obj[a].car_name+"("+
res.content.obj[a].number+")</br>";
e3.setAttribute("value", res.content.obj[a].id);
var object1 = board.appendChild(e3); //填充options
}
}
2.左侧右移,右侧左移实现:
@1.单击右移,左移时,首先判断是否有车辆选中,取得carspan option:selected 判断对象的长度
@2. 取得选中的对象数组 append到右侧即可
个人小疑问:当append的时候,,右侧添加而左侧相应会移除?为什么?,可能是jquery获取的对象的原因,对象的唯一性
当使用jquery append() 方法添加对象元素时,对象唯一只能添加到一个地方
例如:
取得selectedOptions对象想添加到两个select里面,而结果总是只显示在最后面append的select里(自我理解为jquery获取对象的唯一性)
var selectedOptions=$('#carSpan option:selected');
$('#selectCarSpan').append(selectedOptions);
$('#carSpan').append(selectedOptions);
$(document).ready(function() {
$('#move-all').on('click',function() {
if ($('#carSpan option:selected').length) {
var selectedOptions = $('#carSpan option:selected');
$('#selectCarSpan').append(selectedOptions);
} else {
alert('您还没有选中要添加的车辆,请在左侧选择!')
}
})
$('#canel-all').on('click',function() {
if ($('#selectCarSpan option:selected').length) {
var selecteds=$('#selectCarSpan option:selected');
$('#carSpan').append(selecteds);
$('#selectCarSpan option:selected').remove(); //移除之前先左侧添加
} else {
alert('您还没有选中要删除的车辆,请在右侧选择!')
}
})
})
延伸:
若左移时左侧的option不移除,在选择左移时需要判断右侧是否已经存在需要移动的options
//取差集
function getDifferenceSet() {
var carSpan = $('#carSpan option:selected');
var selectCarSpan = $('#selectCarSpan option'); var selected = [];
for (var k=0; k<selectCarSpan.length; k++) { selected.push(selectCarSpan[k].value);
} if (selectCarSpan.length) {
var differenceSet = [];
for (var i=0; i<carSpan.length; i++) {
if (jQuery.inArray(carSpan[i].value,selected) < 0) {
differenceSet.push(carSpan[i]);
}
}
return differenceSet; } else {
return carSpan
} }
多选select实现左右添加删除的更多相关文章
- WPF下的Richtextbox中实现表格合并,添加删除行列等功能
.Net中已有现在的方法实现这些功能,不过可能是由于未完善,未把方法公开出来.只能用反射的方法去调用它. 详细信息可以查看.Net Framework 的源代码 http://referencesou ...
- select Option(增加,删除,清空)
jQuery获取Select选择的Text和Value: $("#select_id").change(function(){//code...}); //为Select添加事件, ...
- 用Javascript动态添加删除HTML元素实例 (转载)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 用SQL语句添加删除修改字段_常用SQL
1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME DROP COLUMNc ...
- 用SQL语句添加删除修改字段
1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME DROP COLUMNc ...
- jQuery添加删除元素
$(document).ready(function () { $('#radioExtranet').on('click', function () { showProjectInformation ...
- DHTMLX 前端框架 建立你的一个应用程序 教程(十一)--添加/删除表格中的记录
添加/删除表格中的记录 我们的最终功能是在表格中添加删除 我们通过单机工具栏上的按钮来实现添加删除 当我们单击添加按钮的时候, 表单中 第一行默认填写New contact 光标自动聚焦 当用户点击删 ...
- SQL语句添加删除修改字段及一些表与字段的基本操作
用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200)2.删除字段 ALTER TABLE table_NA ...
- 添加/删除-HTML DOM 常用对象 -BOM-打开和关闭窗口- history-location
1. 添加/删除 3步: 1. 添加一个空元素 var a=document.createElement("a"); <a></a> 2. 定义元素的关键属 ...
随机推荐
- 更改mysql数据库latin1_swedish_ci为utf8
原文在http://bingu.net/472/latin1_swedish_ci-to-utf8_general_ci/把下列文件保存为一个.php文件,然后运行 <?phpdefine('D ...
- 【PNG格式中文详解】
技术文档(Document) PNG格式 PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性.流式网 ...
- Eclipse Code Template 设置自动加注释(转)
Eclipse Code Template 设置自动加注释 设置注释模板的入口: Window->Preference->Java->Code Style->Code Temp ...
- Huffman树及其应用
哈夫曼树又称为最优二叉树,哈夫曼树的一个最主要的应用就是哈夫曼编码,本文通过简单的问题举例阐释哈夫曼编码的由来,并用哈夫曼树的方法构造哈夫曼编码,最终解决问题来更好的认识哈夫曼树的应用--哈夫曼编码. ...
- 传统IO与NIO的比较
本文并非Java.io或Java.nio的使用手册,也不是如何使用Java.io与Java.nio的技术文档.这里只是尝试比较这两个包,用最简单的方式突出它们的区别和各自的特性.Java.nio提出了 ...
- xml学习篇(二) ----JSON 和XML对比
在比较JSON和XML之前,我们先来上一堂关于数据格式的简要历史(更准确的说,是关于XML的始祖): 早在1970年,IBM开发了一种叫Generalized Markup Language的标记语言 ...
- cocos2d-x创建精灵动画
创建动画一般过程: 1.创建精灵框架缓存,并向其中添加相应的动画文件(plist),最后,通过动画集缓存生产动画 CCSpriteFrameCache *cache = CCSpriteFrameCa ...
- Delphi Memo的记事本功能
Delphi Memo的记事本功能 下载地址 : http://download.csdn.net/detail/teststudio/6412883 这个代码实现了Windows ...
- (原创)googlemap开发(一)
听说我们的客户有了外国淫,所以领导问我目前的项目里高德地图和讯飞语音支持英文和英文发音不,按照我以往的经验判断,讯飞支持英语发音和识别英语是没有问题的,但是高德这玩意貌似只有我大天朝的地图吧.于是,找 ...
- PL/SQL 记录集合IS TABLE OF的使用
在PL/SQL代码块中使用select into 赋值的话,有可能返回的是一个结果集.此时,如果使用基本类型或自定义的记录类型,将会报错. 因此,需要定义一个变量,是某种类型的集合.下面以一个基于表的 ...