案例:实现效果

  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+"&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp"+
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实现左右添加删除的更多相关文章

  1. WPF下的Richtextbox中实现表格合并,添加删除行列等功能

    .Net中已有现在的方法实现这些功能,不过可能是由于未完善,未把方法公开出来.只能用反射的方法去调用它. 详细信息可以查看.Net Framework 的源代码 http://referencesou ...

  2. select Option(增加,删除,清空)

    jQuery获取Select选择的Text和Value: $("#select_id").change(function(){//code...}); //为Select添加事件, ...

  3. 用Javascript动态添加删除HTML元素实例 (转载)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 用SQL语句添加删除修改字段_常用SQL

    1.增加字段     alter table docdsp     add dspcodechar(200)2.删除字段     ALTER TABLE table_NAME DROP COLUMNc ...

  5. 用SQL语句添加删除修改字段

    1.增加字段     alter table docdsp     add dspcodechar(200)2.删除字段     ALTER TABLE table_NAME DROP COLUMNc ...

  6. jQuery添加删除元素

    $(document).ready(function () { $('#radioExtranet').on('click', function () { showProjectInformation ...

  7. DHTMLX 前端框架 建立你的一个应用程序 教程(十一)--添加/删除表格中的记录

    添加/删除表格中的记录 我们的最终功能是在表格中添加删除 我们通过单机工具栏上的按钮来实现添加删除 当我们单击添加按钮的时候, 表单中 第一行默认填写New contact 光标自动聚焦 当用户点击删 ...

  8. SQL语句添加删除修改字段及一些表与字段的基本操作

    用SQL语句添加删除修改字段 1.增加字段     alter table docdsp    add dspcode char(200)2.删除字段     ALTER TABLE table_NA ...

  9. 添加/删除-HTML DOM 常用对象 -BOM-打开和关闭窗口- history-location

    1. 添加/删除 3步: 1. 添加一个空元素 var a=document.createElement("a"); <a></a> 2. 定义元素的关键属 ...

随机推荐

  1. OpenStack Havana 部署在Ubuntu 12.04 Server 【OVS+GRE】(一)——控制节点的安装

      序:OpenStack Havana 部署在Ubuntu 12.04 Server [OVS+GRE] 控制节点: 1.准备Ubuntu 安装好Ubuntu12.04 server 64bits后 ...

  2. win7 变WIFI热点 & 在线Linux 内核代码

    https://daniel.haxx.se/docs/sshproxy.html netsh wlan set hostednetwork mode=allow ssid=mywifi  key=1 ...

  3. MongoDB性能优化指南

    一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存在system.indexes 中,且默认总是为_id创建索引,它的索引使用基本和MySQL 等关系型数据库一样.其实可以这样说说,索引 ...

  4. 佛山Uber优步司机奖励政策(1月25日~1月31日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. sonarQube本机扫描C#项目

    因项目需要,需要使用sonarQube对代码进行扫描并查看,因对sonarQube不熟悉,所以先在本机进行查看. 参考了张老师的博客:http://www.cnblogs.com/danzhang/p ...

  6. spring security +spring boot 自定义 403 页面

    用的spring security  做的权限控制, 当  访问没有权限, 跳转 会跳到默认403 页面.不符合当前项目需求. 一下是解决方式: package com.ycmedia; import ...

  7. DELPHI 重命名文件名时 文件存在自动重命名

          procedure TForm1.Button1Click(Sender: TObject); var Dir, FileTitle, FileExt: string; s,s1: str ...

  8. Shell脚本编程——了解你的Linux系统必须掌握的20个命令

    要想详细了解你的Linux系统,为系统评估和性能调化提供准确的信息,那么,你会经常用到这几组命令. 一. 系统信息     1. 查看内核版本.编译主机.编译器版本和编译时间的信息    cat /p ...

  9. MYSQL查询计划KEY_LEN

    http://www.innomysql.com/article/25241.html 1 key_len的含义 2 MySQL中key_len计算规则 3 通过key_len分析联合索引 本文首先介 ...

  10. Image路径问题

    BitmapImage image = new BitmapImage(new Uri("/Pictures/log.png", UriKind.Relative)); evaIm ...