当前位置: 首页 > 编程日记 > 正文

可以左右移动多选下拉列表的javaScipt(可以兼容IE和firefox)

自己在项目业余时间总结了一份可以左右移动(Add和remove)多选下拉列表的javaScipt,可以兼容IE和firefox,并且经过测试,只是代码略显臃肿,希望各位网友参考后给一些指点,特别是在简化代码方面。

我在让其兼容 firefox很是费了一番心血,所以希望也能对大家有帮助。

注:其实我的javaScript后台和AJAX集成, 和key的多选下拉列表在项目中隐藏掉就好了。javaScipt左右移动和resource相关的下拉列表,不需要全表单提交,就可以改变右边两个多选下拉列表的值,然后提交到后台。

<html>
<script language="javascript">
            function isIE(){ //ie?
            if (window.navigator.userAgent.toLowerCase().indexOf("msie")>=1)
                return true;
               else
                return false;
             }

            function moveSelected(oSourceSelName,oTargetSelName,oSourceSelNamekey,oTargetSelNameKey)
            {                 
                    //alert("isIE  "+isIE());

                    var selectResourcesString = "";
                    var arrSelValue = new Array();        
                    var arrSelText = new Array();
                    var arrSelOption = new Array();                
                    var oSourceSel = document.getElementById(oSourceSelName);
                    var oTargetSel = document.getElementById(oTargetSelName);

                    var arrSelValueKey = new Array();                              
                    var arrSelTextKey = new Array();
                    var arrSelOptionKey = new Array();
                    var oSourceSelKey = document.getElementById(oSourceSelNamekey);
                    var oTargetSelKey = document.getElementById(oTargetSelNameKey);
                    if(!isIE())
                    {
                        //alert("if")
                        var optionContent = oTargetSel.innerHTML;            
                        var optionContentKey = oTargetSelKey.innerHTML;
                        //alert("optionContentKey  "+optionContentKey);
                        for(var i=0; i<oSourceSel.options.length; i++)
                        {
                            if(oSourceSel.options[i].selected)
                            {
                                arrSelValue[arrSelValue.length] = oSourceSel.options[i].value;   
                                arrSelText[arrSelText.length] = oSourceSel.options[i].text;                                                
                                arrSelOption[arrSelOption.length] = oSourceSel.options[i];        
                                arrSelValueKey[arrSelValueKey.length] = oSourceSelKey.options[i].value;
                                arrSelTextKey[arrSelTextKey.length] = oSourceSelKey.options[i].text;
                                arrSelOptionKey[arrSelOptionKey.length] = oSourceSelKey.options[i];
                                            
                            }
                        }            
                        for(var i=0; i<arrSelValue.length; i++)  
                        {
                            var name =  arrSelText[i];
                            var value =  arrSelValue[i];
                            var oOption = '<option value=';
                            oOption += value;
                            oOption += '>';
                            oOption += name;
                            oOption += '</option>';
                            var oOptionKey = '<option value=';
                            oOptionKey += arrSelValueKey[i];
                            oOptionKey += '>';
                            oOptionKey += arrSelTextKey[i];
    
                            oOptionKey += '</option>';
                            optionContent +=  oOption;
                            optionContentKey +=  oOptionKey;
                            oSourceSel.removeChild(arrSelOption[i]);
                            oSourceSelKey.removeChild(arrSelOptionKey[i]);
                        }
                        oTargetSel.innerHTML = optionContent;
                        oTargetSelKey.innerHTML = optionContentKey;         
                    }
                    else
                    {
                        //alert("else");                                                     
                        for(var i=0; i<oSourceSel.options.length; i++)
                        {
                            if(oSourceSel.options[i].selected)
                            {
                                arrSelValue[arrSelValue.length] = oSourceSel.options[i].value;                                                
                                arrSelText[arrSelText.length] = oSourceSel.options[i].text;                                                                
                                arrSelOption[arrSelOption.length] = oSourceSel.options[i];
                                arrSelValueKey[arrSelValueKey.length] = oSourceSelKey.options[i].value;
                                arrSelTextKey[arrSelTextKey.length] = oSourceSelKey.options[i].text;
                                arrSelOptionKey[arrSelOptionKey.length] = oSourceSelKey.options[i];             
                            }
                        }
                        
                        //alert("arrSelValue"+arrSelValue);
                        for(var i=0; i<arrSelValue.length; i++)  
                        {
                            var name =  arrSelText[i];
                            var value =  arrSelValue[i];
                            var oOption = document.createElement("option");
                            oOption.text = arrSelText[i];
                            oOption.value = arrSelValue[i];
                            var oOptionKey =  document.createElement("option");
                            oOptionKey.text = arrSelTextKey[i];
                            oOptionKey.value = arrSelValueKey[i];
                            var k=0;
                            for(k=0;k<oTargetSel.options.length;k++)
                            {
                                if(oTargetSel.options[k].value > arrSelValue[i])
                                {
                                   break;    
                                }            
                            }
                            for(k=0;k<oTargetSelKey.options.length;k++)
                            {
                                if(oTargetSelKey.options[k].value > arrSelValueKey[i])
                                {
                                   break;    
                                }            
                            }                    
                            //alert("oOption "+oOption);
                            oTargetSel.add(oOption,k);
                            oTargetSelKey.add(oOptionKey,k);
                            oSourceSel.removeChild(arrSelOption[i]);
                            oSourceSelKey.removeChild(arrSelOptionKey[i]);
                            //alert(oSourceSel.value);
                            //alert(oSourceSelKey.value);
                        }     
                    }
            }
</script>
<form>

<table>
<tr>
<td>
Resource
<div>
    <select id="$Select" multiple="multiple"  size="12">
        <option value="0">server 1</option>
        <option value="1">server 2</option>
     </select>
</div>
<div>
<td>
        <a οnclick="javaScript:moveSelected('$Select','$Select$0','$Select$1','$Select$0$0')"  href="#" id="Add"><span>Add</span> &gt;</a><br />
        <a οnclick="javaScript:moveSelected('$Select$0', '$Select','$Select$0$0','$Select$1')"  href="#" id="Move">&lt; <span>Remove</span></a>            
</td>
</div>    
</td>
<td>
<div>
<select id="$Select$0" multiple="multiple"  size="12">

    <option value="0">server 3</option>
    <option value="1">server 4</option>
 </select>
</div>
<td>
<tr>

<tr>
<td>
Key
<div>
<select id="$Select$1" multiple="multiple"  size="12">
         <option value="0">server 1 key</option>
        <option value="1">server 2 key</option>
</select>
</div>    
</td>
<td>
        
</td>
<td>
<div>
<select id="$Select$0$0" multiple="multiple" size="12">
        <option value="0">server 3 key</option>
        <option value="1">server 4 key</option>
 </select>
</div>
</td>
</tr>
</table>
</form>
</html>


转载于:https://www.cnblogs.com/kungfupanda/archive/2010/06/28/1766722.html

相关文章:

OLAP和OLTP的区别(基础知识)

联机分析处理 (OLAP) 的概念最早是由关系数据库之父E.F.Codd于1993年提出的&#xff0c;他同时提出了关于OLAP的12条准则。OLAP的提出引起了很大的反响&#xff0c;OLAP作为一类产品同联机事务处理 (OLTP) 明显区分开来。当今的数据处理大致可以分成两大类&#xff1a;联机事务…

如何让phpmyadmin输入密码再进入

分类&#xff1a;wamp对于很多不熟悉PHP环境安装的朋友来说&#xff0c;用集成环境可以更快的上手&#xff0c;更方便的搭建PHP的运行环境&#xff0c;但是&#xff0c;WAMP的集成环境仅仅是将底层基础工作做好了&#xff0c;有些个别关键的配置操作并没有集成到环境安装中&…

Visual Studio UML Use Case Diagram(2)

Use Case Model是捕获用户需求确定系统边界最流行的方法。Use Case Model由两部分组成Use Case Diagram和Use Case Specification&#xff0c;对于不方便描述的部分可以放在Supplementary Specification中&#xff0c;通过Glossary统一大家的用词规范。昨天我们介绍了Visual St…

Delphi下利用WinIo模拟鼠标键盘详解

本文最早在编程论坛上发表&#xff0c;文章地址&#xff1a;http://programbbs.com/bbs/view12-17207-1.htm&#xff0c;相关文件可以在上述地址的页面中下载。转载时请注明出处。 前言 一日发现SendInput对某程序居然无效&#xff0c;无奈只好开始研究WinIo。上网查了很多资料…

在vs2005中使用Jmail发送邮件问题

jmail.Message Jmail new jmail.Message(); DateTime t DateTime.Now; String Subject " From EMail .net"; String body "你好科学12:15"; String FromEmail "jsyxo163.com"; String ToEmail…

nginx学习之静态内容篇(五)

1.根目录和索引文件 server {root /www/data;location / {}location /images/ {}location ~ \.(mp3|mp4) {root /www/media;} } root指令能放置的位置是&#xff1a;http&#xff0c;server&#xff0c;location。 上面的意思是&#xff1a;我所有的location定义都是基于根目录…

Modeling System Behavior with Use Case(1)

Modeling System Behavior with Use case 我们分为三个部分进行介绍&#xff0c;主要内容包括&#xff1a;需求简介、Use Case Model&#xff08;Use Case Diagram、Use Case Specification&#xff09;、Supplimentary Specification和Glossary&#xff0c;这部分内容是开发过…

matlab练习程序(高斯牛顿法最优化)

计算步骤如下&#xff1a; 图片来自《视觉slam十四讲》6.2.2节。 下面使用书中的练习yexp(a*x^2b*xc)w这个模型验证一下&#xff0c;其中w为噪声&#xff0c;a、b、c为待解算系数。 代码如下&#xff1a; clear all; close all; clc;a1;b2;c1; %待求解的系数x(0:0…

和Office一起做减肥操

随着微软公司的不断开发&#xff0c;Microsoft Office这款大家熟悉的软件真是越来越好用。可是随着版本的更新&#xff0c;软件的身材却越来越“肥胖”&#xff0c;于是很多朋友总想知道如何给它们“减肥”&#xff1f;今天&#xff0c;我们就说一说如何为Office2003减肥吧&…

codevs——1220 数字三角形(棋盘DP)

时间限制: 1 s空间限制: 128000 KB题目等级 : 黄金 Gold题解题目描述 Description如图所示的数字三角形&#xff0c;从顶部出发&#xff0c;在每一结点可以选择向左走或得向右走&#xff0c;一直走到底层&#xff0c;要求找出一条路径&#xff0c;使路径上的值最大。 输入描述 …

Modeling System Behavior with Use Case(2)

这是Modeling System Behavior with Use Case的第二部分&#xff0c;本图文首先介绍Use Case Model&#xff0c;然后介绍Actor以及Actor之间的关系&#xff0c;Use Case以及Use Case之间的关系&#xff0c;最后介绍Actor与Use Case之间的关系。

【Python】keras卷积神经网络识别mnist

卷积神经网络的结构我随意设了一个。 结构大概是下面这个样子&#xff1a; 代码如下&#xff1a; import numpy as np from keras.preprocessing import image from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten, Activation from keras.…

IIS安全机制基础

IIS (Internet Information Server)作为当今流行的Web服务器之一&#xff0c;提供了强大的Internet和Intranet服务功能。如何加强IIS的安全机制&#xff0c;建立高安全性能的可靠的Web服务器&#xff0c;已成为网络管理的重要组成部分。 以Windows NT的安全机制为基础 …

CLion 2017 注册码

注册码使用时间2017-2018 CNEKJPQZEX-eyJsaWNlbnNlSWQiOiJDTkVLSlBRWkVYIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb…

Modeling System Behavior with Use Case(3)

这是Modeling System Behavior with Use Case的最后一个部分&#xff0c;主要介绍Use Case Specification、Supplementary Specification和Glossary。今天华电时断时续停电&#xff0c;导致早晨所做的工作丢失&#xff0c;很是难过&#xff0c;发完这个图文&#xff0c;我继续代…

2019最新版本的PanDownload纯净版,网盘满速下载和搜索神器,追剧和动漫新番必不可少的下载工具【亲测有效】

PanDownload是百度网盘的第三方下载神器&#xff0c;它支持快速搜索功能&#xff0c;快速找到你想要的东西&#xff0c;还支持满速下载&#xff0c;可谓是不可多得的下载神器。 下载地址&#xff1a;http://t.cn/EobUOTS 城通网盘下载地址&#xff1a;https://u20150046.ctfi…

codevs——2894 Txx考试(背包)

时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解题目描述 DescriptionTxx是一个成绩很差的人&#xff0c;考试便成了他的噩梦。于是他常在考试时睡觉以打发时间。今天他又要面临一次考试&#xff0c;为了保证有充足的睡眠&#xff0c;他决定只做k分钟题目。这次测…

利用Use Case为系统行为建模(1)

需求这块写了很多了&#xff0c;就剩下最后的三篇图文了。后面我们进入分析与设计部分。大概10月中旬&#xff0c;我们结束这块。开始机器学习的总结与代码实现。

LightTools( 32-64) 8.4.0下载与安装方法,lighttools免费版,lighttools(光学建模软件)【亲测有效】

对于从事光学建模的同学们来说拥有一款功能强大的光学建模软件来辅助的话那么将能提升工作效率&#xff0c;LightTools就是一款功能强大的光学建模软件。它是面向专业用户推出的一款能够增进光学系统设计效率的光学建模软件&#xff0c;该软件支持光机一体化设计&#xff0c;并…

百叶窗显示图片

using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data; namespace Image{ /// <summary> /// Form1 的摘要说明。 /// </summary> public class Form1 : System.Windows.Forms.…

python安装pillow模块错误

安装的一些简单步骤就不介绍了&#xff0c;可以去搜索一下&#xff0c;主要就记录下我在安装pillow这一模块遇到的问题 1&#xff1a;安装好pillow后&#xff0c;安装过程没有出错 2&#xff1a;但是在python的IDLE输入from PIL import Image出错 原因&#xff1a;pillow版本与…

利用Use Case为系统行为建模(2)

本节主要介绍Use Case Diagram部分&#xff0c;其中包括Actor以及Actor之间的关系、Use Case以及Use Case之间的关系、Actor与Use Case之间的关系。这是利用Use Case Model捕获系统行为最核心的部分。明天还有一节&#xff0c;有关于软件需求部分就全部介绍完了。

启示录:打造用户喜爱的产品【PDF清晰版】,产品经理必看书籍之一

启示录&#xff1a;打造用户喜爱的产品是一本很值得一买的启蒙书&#xff0c;在书的扉页中写着&#xff0c;“好产品具备三个基本条件&#xff1a;价值、可用性、可行性&#xff0c;三者缺一不可。产品没有价值&#xff0c;开发团队再优秀也无济于事。” 书本主要是分成了三部…

eclipse 中断言使用的设定

JAVA是从JDK1.4才开始支持断言的&#xff08;添加了关键字assert&#xff09; 选择菜单"Windows"->"Perferences"&#xff0c;在对话框中找到"Java"->"Complier"->"Compliance and Classfiles"&#xff0c;把"…

利用Use Case为系统行为建模(3)

到这篇文章为止&#xff0c;需求部分就全部介绍完了。我们回顾一下&#xff0c;需求是RUP静态结构的一个工作流&#xff0c;Rational通过需求金字塔模型来理解需求过程&#xff0c;在需求部分我们要得到用例图、用例描述、补充规约和术语表等制品。这部分我们需要理解参与者与参…

freemarker取值

获取java Map集合的值&#xff1a;${map["key"]}

flutter离线源码安装包最新版本下载地址

Flutter 是在2018 世界移动大会上发布了第一个 Beta 版本&#xff0c;Flutter 用以帮助开发者在 Android 和 iOS 两个平台&#xff0c;同时开发高质量原生应用的全新移动 UI 框架。本文提供下最新版的下载地址。 flutter1.5.8windows安装包下载地址&#xff1a;http://t.cn/EoY…

MongoDB 搭建副本集

副本集&#xff08;Replica Set&#xff09;是一组MongoDB实例组成的集群&#xff0c;由一个主&#xff08;Primary&#xff09;服务器和多个备份&#xff08;Secondary&#xff09;服务器构成。通过Replication&#xff0c;将数据的更新由Primary推送到其他实例上&#xff0c;…

dfasdfasdfas

fasdfasfasdfafd转载于:https://www.cnblogs.com/lulei/archive/2006/10/17/531694.html

原型模式(Prototype)

克隆方法是我们经常使用的一种软件开发技巧&#xff0c;记得当年给经管系做沙盘ERP时&#xff0c;需要保存每年资产负债表的数据&#xff0c;当时对这种模式不熟悉&#xff0c;导致后期的数据变化使前期数据被动改变&#xff0c;现在想想&#xff0c;还是当时学艺不精&#xff…