html的select控件实用js操作

2023-11-19

http://www.cnblogs.com/j3eee/archive/2010/01/06/1640368.html

上 周在公司的erp项目中,将原来的商品分类(大类,一级分类和小类)改造成select控件的三级联动的效果(实际上笔者使用的是三个 DropdownList控件)。用到了select控件的插入和移除option的操作方法。根据笔者的经验,在实际项目中,select控件是经常要 用到的(当然包括DropdownList控件)。下面就整理发布一下select的一些常见js操作方法。贴代码为主:


/*select控件常见操作*/

//1、向select里添加option
function selectOptionAdd(oSelect, sName, sValue) {
    
var oOption = document.createElement("option");
    oOption.appendChild(document.createTextNode(sName));

    
if (arguments.length == 3) {
        oOption.setAttribute(
"value", sValue);
    }

    oSelect.appendChild(oOption);
}
//在select控件的指定位置插入一项
function addOptionAtPosition(oSelect, optionValue, optionText, position) {
    
if (document.all) //IE
    {
        
var option = document.createElement("option");
        option.value 
= optionValue;
        option.innerText 
= optionText;
        oSelect.insertBefore(option, oSelect.options[position]);
    }
    
else { //其他浏览器
        oSelect.insertBefore(new Option(optionValue, optionText), oSelect.options[position]);
    }
}


//2、删除select里的option
function selectOptionRemoveItem(oSelect) {
    
if (oSelect.selectedIndex > -1) {//说明选中
        for (var i = 0; i < oSelect.options.length; i++) {
            
if (oSelect.options[i].selected) {
                oSelect.remove(i);
                i 
= i - 1//注意这一行 **************************
            }
        }
    }
}
//select移除一项
function removeOneOption(oSelect, optionValue) {
    
var selOptions = oSelect.options;
    
for (var i = 0; i < selOptions.length; i++) {
        
if (selOptions[i].value == optionValue) {
            oSelect.remove(i);
            
break;
        }
    }
}

// 清空select所有项目
function removeSelItems(oSelect) {
    
//删除select中所有项
    oSelect.options.length = 0;
}

//3、移动select里的option到另一个select中
function selectsMoveOption(oSelectFrom, oSelectTo) {
    
for (var i = 0; i < oSelectFrom.options.length; i++) {
        
if (oSelectFrom.options[i].selected) {
            
/*if 里的代码也可用下面几句代码代替 var op = oSelectFrom.options[i];oSelectTo.options.add(new Option(op.text, op.value));oSelectFrom.remove(i); */
            oSelectTo.appendChild(oSelectFrom.options[i]);
            i 
= i - 1;
        }
    }
}

//4、select里option的上下移动
function selectMoveUp(oSelect) {
    
for (var i = 1; i < oSelect.length; i++) {//最上面的一个不需要移动,所以直接从i=1开始
        if (oSelect.options[i].selected) {
            
/*在 进行上下两项互换时,也可以使用以下代码,但是效率很低,因为每一次的Dom操作都将导致整个页面的重新布局,所以不如直接修改元素的属性值。 var oOption = oSelect.options[i];var oPrevOption = oSelect.options[i-1]; oSelect.insertBefore(oOption,oPrevOption);向下移动同理 */
            
if (!oSelect.options.item(i - 1).selected) {//上面的一项没选中,上下交换
                var selText = oSelect.options[i].text;
                
var selValue = oSelect.options[i].value;

                oSelect.options[i].text 
= oSelect.options[i - 1].text;
                oSelect.options[i].value 
= oSelect.options[i - 1].value;
                oSelect.options[i].selected 
= false;

                oSelect.options[i 
- 1].text = selText;
                oSelect.options[i 
- 1].value = selValue;
                oSelect.options[i 
- 1].selected = true;
            }
        }
    }
}

function selectMoveDown(oSelect) {
    
for (var i = oSelect.length - 2; i >= 0; i--) {//向下移动,最后一个不需要处理,所以直接从倒数第二个开始
        if (oSelect.options.item(i).selected) {
            
if (!oSelect.options.item(i + 1).selected) {//下面的Option没选中,上下互换
                var selText = oSelect.options.item(i).text;
                
var selValue = oSelect.options.item(i).value;

                oSelect.options.item(i).text 
= oSelect.options.item(i + 1).text;
                oSelect.options.item(i).value 
= oSelect.options.item(i + 1).value;
                oSelect.options.item(i).selected 
= false;

                oSelect.options.item(i 
+ 1).text = selText;
                oSelect.options.item(i 
+ 1).value = selValue;
                oSelect.options.item(i 
+ 1).selected = true;
            }
        }
    }
}
//5、select里option的排序
/*
这里借助Array对象的sort方法进行操作,sort方法接受一个function参数,可以在这个function里定义排序时使用的算法逻辑。*/

//因为排序可以按Option的Value排序,也可以按Text排序,这里按Value排序
function sortItems(oSelect) {
    
var selLength = oSelect.options.length;
    
var arr = new Array();
    
var arrLength;
    
//将所有Option放入array
    for (var i = 0; i < selLength; i++) {
        arr[i] 
= oSelect.options[i];
    }
    arrLength 
= arr.length;
    arr.sort(sortNumber); 
//排序
    //先将原先的Option删除
    while (selLength--) {
        oSelect.options[selLength] 
= null;
    }
    
//将经过排序的Option放回Select中
    for (i = 0; i < arrLength; i++) {
        selectOptionAdd(oSelect, arr[i].text, arr[i].value);
        
//oSelect.add(new Option(arr[i].text,arr[i].value));
    }
}

//6.鼠标悬浮时获取select的options的index
function getOptionIndex(oSelect) {
    
var theIndex = -1;
    
if (oSelect.options.length > 0) {
        theIndex 
= Math.floor((event.offsetY + 2/ (oSelect.offsetHeight / oSelect.options.length));
        
if (theIndex < 0) theIndex = 0;
        
else if (theIndex > oSelect.options.length) theIndex = oSelect.options.length;
    }
    
return theIndex;
}

最后要说明的是级联select的操作要涉及很多后台代码,比如注册脚本(通常交给后台一个.ashx文件来做),分类值的初始化(页面取值和赋值 以及js实现的联动初始化函数)。这里涉及到具体的项目需要,思路大同小异,就不贴笔者在项目中实现的联动效果代码了。 需要注意的是如果你给 DropdownList控件注册了js事件,页面的EnableEventValidate必须设置为false。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

html的select控件实用js操作 的相关文章

  • HTML5 LocalStorage 本地存储

    原文地址 http www cnblogs com xiaowei0705 archive 2011 04 19 2021372 html 说到本地存储 这玩意真是历尽千辛万苦才走到HTML5这一步 之前的历史大概如下图所示 最早的Cook
  • [极客大挑战 2019]Http(BUUCTF)

    前言 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 题目描述 解题工具 我用fiddler抓包 burpsuite也可以 解题过程 用F12查看一下源代码 发现Secret php 进入是一个高档页面 翻译一下意思是 来源不是
  • javascript对象概念大全

    http www css88 com archives 512 本文介绍了几乎所有关于对象的基本概念 什么是对象 如何创建对象 对象的属性的设置和读取 删除属性的方法 构造函数 对象原型 父类 子类 继承等等 1 对象 对象是一种复合数据类
  • 大华web插件

    因为项目需要 需要把大华视频监控移至到网页端 在网上找了很多资料 最终找到下面链接的插件包 本人自己调试了一下 可以正常运行 而且包中附带有详细的二次开发资料 很方便 测试浏览器使用360安全浏览器 并且在兼容模式和极速模式下均可正常使用
  • Qt 应用程序显示页面的方法

    1 在qt窗口中显示页面 1 pro中添加 QT webkitwidgets 2 添加头文件 include
  • js 分浏览器设置style属性

    http www cnblogs com jianshao810 archive 2010 06 20 1761120 html var cssText font weight bold color red 下面写法用于firefox类型浏
  • 怎么建立一个自己的博客

    怎么建立一个自己的博客 1 写在开头 其实我自己写的文章也不多 只是看到有些东西会做一下记录 所以部署一个自己的博客来记录这些东西也就会方便很多 而Hexo框架的博客使用方便对电脑要求也不高 并且有很多可以使用的主题 所以就用它把 先来看看
  • cookie 和session 的区别详解

    原文地址 http www cnblogs com shiyangxt archive 2008 10 07 1305506 html 这些都是基础知识 不过有必要做深入了解 先简单介绍一下 二者的定义 当你在浏览网站的时候 WEB 服务器
  • java实现信息的增删改查功能的网页设计(1)

    仅供参考 不可转载 如遇其他情况概不负责 后果自负 切记 该项目运用的技术 spring springMVC ibatis 本网页只有一个页面 包过信息的增 删 改 查功能 只有部分代码 仅供参考 因该项目比较大 所以仅提供了一个页面内的增
  • 梦之光芒Monyer (全关解析)

    目录 前言 第0关 描述 过程 第1关 描述 过程 第2关 描述 过程 第3关 描述 过程 第4关 描述 过程 第5关 描述 过程 第6关 描述 过程 第7关 描述 过程 第8关 描述 过程 第9关 描述 过程 第10关 描述 过程 第11
  • WebRTC在浏览器中的演示

    WebRTC在chrome浏览器里演示的例子很多 WebRTC的源码里就有 但是在Firefox浏览器里 例子不能使用 网上的资料说要把 media peerconnection enabled 设置为True 但是Firefox浏览器里
  • HTML导航菜单

    frameset html 文件
  • 在网页中插入视频的代码

    今天在网站上看到一个在网页上显示视频的代码 觉得很有用 先收藏一下 以后备用 直接加入这个代码就可以了 由于本地网站视频会对服务器造成很大的压力 所以可以先上传到这种免费的网站上 然后直接引用链接即可 这不但减轻服务器的
  • 【Dash搭建可视化网站】项目1:使用Dash创建简单网页

    项目1 使用Dash创建简单网页 项目1 使用Dash创建简单网页 1 1 官网示例 1 2 绘制简单网页的基本步骤 1 3 创建一个稍微有意思的页面 手动反爬虫 禁止转载 原博地址 https blog csdn net lys 828
  • Gitee搭建自己的图床

    CSDN前段时间的下拉广告和红包雨属实恶心人 现在打算逐步分离文章 而为了避免以后发生更换平台而导致不必要的麻烦 还是把图床单独分离出比较好 图床有商业收费的 如七牛 又拍云 阿里oss数据存储这些 会按空间和流量来收费 高稳定性 适合企业
  • JS对象类型的确定

    http liaofeng xiao iteye com blog 697029 JS是松散类型的语言 这一点JS的对象表现得尤为突出 那么如何来确定JS对象的具体类型呢 首先 我们可以使用typeof运算符确定其基本类型 number o
  • JavaScript window.location对象

    http www cnblogs com ljan archive 2012 02 27 2369960 html location 地址对象 它描述的是某一个窗口对象所打开的地址 要表示当前窗口的地址 只需要使用 location 就行了
  • Ajax中的XMLHttpRequest对象详解

    原文地址 http www cnblogs com shunyao8210 archive 2008 11 24 1339718 html XMLHttpRequest对象是Ajax技术的核心 在Internet Explorer 5中 X
  • JS 读写文件(实例)

    http blog sina com cn s blog 62cd41130100l7c5 html 用js不能直接读取文件 但是可以利用浏览器提供的activex来实现读写文件的方法 只在IE下测试过 其他浏览器下的activex对象不太
  • js中中括号,大括号使用详解

    http blog sina com cn s blog 5cd7f5b401019rsd html 一 大括号 表示定义一个对象 大部分情况下要有成对的属性和值 或是函数 如 var LangShen Name Langshen AGE

随机推荐

  • QT new模态对话框

    1 如果父窗口是new出的 则子窗口如果用堆栈的方式 Dlg dlg 创建 则会出现QWSLock up down Invalid argument错误 这实际上QT4 8的一个Bug 如果不想重新编译Qt的话 可以采用以下方式临时避免一下
  • VSC/SMC(十六)——自适应鲁棒滑模控制

    目录 1 参数不定和扰动不定但有界的系统 2 滑模控制自适应律设计 2 1控制律设计总结 3 仿真分析 3 1 PD控制 3 2普通自适应律 3 3映射自适应律 3 4总结 4学习问题 1 参数不定和扰动不定但有界的系统 其中 2 滑模控制
  • lua json 库

    1 luajson GitHub mpx lua cjson Lua CJSON is a fast JSON encoding parsing module for Lua clone 源码 cd lua cjson 2 1 0 make
  • typescripe中的ajax和axios(一)

    typescript是基于JavaScript的 JavaScript中前端请求到后端使用的是Ajax Asynchronous JavaScript and XML 而在typescript中请求使用的axios axios是通过prom
  • ovirt节点添加windows虚拟机

    1 新建windows7虚拟机 设置Windows7镜像引导 2 启动起来后换盘安装驱动 换的是驱动盘 3 驱动安装成功后分区 再把系统盘换回来 开始装系统 4 等待装系统即可
  • 【Linux & IO多路转接】——epoll详解

    目录 一 epoll简介 二 epoll相关系统的调用 1 epoll create 2 epoll ctl 3 epoll wait 三 epoll工作方式 1 水平触发模式 level triggered LT 2 边缘触发模式 edg
  • C++征途 --- List链表容器

    第一部分 基础概念 上面这个模型的是一个单向链表 优点 1 链表增加和删除节点的时候不需要进行vector数组那样的增完后进行后移 也不需要删完后前移 当它增加一个节点的时候 只需要将它插入的位置的上一个节点的指针域中的指针指向增加的节点
  • 六、03【Java 多线程】之Java线程

    Java 创建线程的方式 Java创建线程有四种方式 继承 Thread 类 实现 Runnable 接口 实现 Callable 接口 使用 Executors 工具类创建线程池 1 继承 Thread 类 创建一个类继承 Thread
  • shell习题-被3整除

    1 要求 写一个脚本 计算100以内所有能被3整除的正整数的和 2 脚本答案 root liang 2018 06 23 vim 2018 06 23 sh bin bashfor i in seq 100 do Num i 3 if Nu
  • Vue踩坑记录(一)——vue,data属性为什么使用了_或$开头却会提示报错?

    我们先来看一个简单的例子
  • cityscapes和Mapillary Vistas两种不同分割数据集的label映射

    众所周知 cs一共有19类 但是Mapillary Vistas有很多类 在做domain adaption的时候 往往需要将二者的类别做一个映射 如下表 同时发现Mapillary Vistas这个数据集下载下来之后 对应的label咋i
  • malloc与free的底层实现

    1本节引言 内存管理内幕 Linux内存管理 Malloc 本文引用了下面这篇文章 读完下面 应该读下上面两篇文章 其中 内存管理内幕 提供了一个简单的malloc free实现版本 看看它的free设计 相信有足够的吸引力 gnu fre
  • Linux基础——Bash

    Bash Bash是什么 查看Linux中的Shell Bash的优点 命令记忆功能 补全功能 命令别名 工作 前景背景控制 脚本 通配符 内置命令 Bash环境配置流程 Login Shell Non login shell Bash是什
  • C# 实现一个简单的图书管理系统(无数据库)新手教程1

    源码在vs2005中测试可以运行 源码如下 using System class Card private string title author private int total public Card title author tot
  • vm使用PE安装系统(1)

    VMware虚拟机使用PE安装系统有什么好处 可以不受虚拟机安装系统文件格式的限制 使用PE可以安装ESD GHO WIM ISO等等系统格式 第一步解压U启动制作软件的压缩包 软件包使用的是IT天空的优启通可以自行网络查找 打开软件后 选
  • Java知识习题汇总【入门基础篇】

    Java常考 Java语言的主要贡献者是James Gosling Java源文件名必须与程序中的public类名匹配 Java源代码必须以 java扩展名 Java源文件中可以有多个类 最多只能有一个public类 也可以没有public
  • 计算机系统基础课程实验课bomb--phase_5

    首先还是栈指针自减和 rbx入栈 而后将第一个参数的值放入 rbx 再有在 eax中设置了一个哨兵防止越界 而后将 rax中的值放入0x18 rsp 接着 eax eax 然后调用函数
  • Firefox 终于对退格键“下手”了!

    你有因用过退格键而后悔吗 作者 苏宓 出品 CSDN ID CSDNnews 写代码时 你经历过电脑突然黑屏的恐惧感吗 还没来得及 Ctrl S 一朝回到 最初的模样 然而 即使电脑没有黑屏 当鼠标停留在某些网页上而非文本输入之处时 手速过
  • Unity中Shader实现UI去色功能的实现思路

    文章目录 前言 一 在开发过程中 在UI中会涉及一些需要置灰UI的需求 有很多实现的方法 1 做两套纹理 通过程序控制切换 2 使用shader实现对纹理去色 二 这里主要记录用shader实现的思路 1 基础纹理的采样 2 支持组件中的调
  • html的select控件实用js操作

    http www cnblogs com j3eee archive 2010 01 06 1640368 html 上 周在公司的erp项目中 将原来的商品分类 大类 一级分类和小类 改造成select控件的三级联动的效果 实际上笔者使用