之前项目中,遇到一个表单提交的页面,里面有多级下拉框联动的复杂逻辑,因此当时在做的过程中也是学到了不少容易出现问题的地方,下面就整理下当时遇到的一些关于下拉框的操作,并指出其中的一些注意点和坑:

有如下的下拉框:

<select id="ddlResourceType" onchange="getvalue(this)">
</select>

1、动态删除select中的所有options:

document.getElementById("ddlResourceType").options.length=0;

2、动态删除select中的某一项option:

document.getElementById("ddlResourceType").options.remove(index); 

3、动态添加select中的项option:

document.getElementById("ddlResourceType").options.add(new Option(text,value)); 

上面的操作在IE和火狐中都能测试成功,其实用标准的DOM操作也可以,就是document.createElement,appendChild,removeChild之类的。

4、下面要说下在取值方面,自己遇到的一个坑,很隐藏的坑,大家都知道,如何获取选中的某一项option的值,当初在用chrome调试的时候,打印出了原生select对象,找到了selectedOptions这个选中项的数组属性,正常情况下,单选下拉框的该属性只有一个值,默认可以使用selectedOptions[0]这样的方式去获取,是的,我当时就是这样去弄的,结果项目上线后大概将近半个月的时候,运营那边报告说,客户在IE浏览器下,下拉框没有数据显示,我当时就想,下拉框动态获取的数据肯定是取数据的时候,出现错误了,然后逐一去排查,发现报错的原因是ie下面select原生对象里,是没有selectedOptions这样的属性的,那么只能另辟蹊径来解决了,我仔细找了下剩余的一些属性,发现  找到了 selctedIndex这样的一个好属性,一看字面意思就明白了,就是选中项的index值啊,这就好办了啊,直接用options[selectedIndex]去访问不就好了么,到此,问题顺利解决:

取值的时候,应该这样做,才能保证兼容性:

function getvalue(obj)
{
var m=obj.options[obj.selectedIndex].value
alert(m);//获取value
var n=obj.options[obj.selectedIndex].text
alert(n);//获取文本
}

5、 检测是否有选中

if (objSelect.selectedIndex > - 1 ) {
// 说明选中
} else {
// 说明没有选中
}

6、删除被选中的项

objSelect.options[objSelect.selectedIndex] = null ; 

7、增加项

objSelect.options[objSelect.length] = new Option( " 你好 " , " hello " ); 

8、修改所选择中的项

objSelect.options[objSelect.selectedIndex] = new Option( " 你好 " , " hello " );

9、得到所选择项的文本

objSelect.options[objSelect.selectedIndex].text; 

10、得到所选择项的值

objSelect.options[objSelect.selectedIndex].value;

纸上得来终觉浅,绝知此事要躬行。必须要去尝试,在实践中,才能获得解决问题的最有效的途径,这也是让记忆深刻的唯一方式,共勉。

JS对select动态添加options操作(主流浏览器兼容)的更多相关文章

  1. JS对select动态添加options操作[IE&FireFox兼容]

    <select id="ddlResourceType" onchange="getvalue(this)"> </select> 动态 ...

  2. JS对select动态添加option操作 (三级联动) (搜索拼接)

    以下纯属自我理解之下再东搜西查的内容~ JS对select动态添加option操作有个高大上的艺名叫多级联动:第一级改变时,第二级跟着变,第二级改变时,第三级跟着变... 本菜鸟是在工作中遇到做收货地 ...

  3. js对select动态添加和删除OPTION

    <select id="ddlResourceType" onchange="getvalue(this)"> </select> 动态 ...

  4. 使用js对select动态添加和删除OPTION示例代码

    动态删除select中的所有options.某一项option以及动态添加select中的项option,在IE和FireFox都能测试成功,感兴趣的朋友可以参考下,希望对大家有所帮助   <s ...

  5. 使用js对select动态添加和删除OPTION

    <select id="ddlResourceType" onchange="getvalue(this)"> </select> 动态 ...

  6. js实现select动态添加option

    关于 select 的添加 option 应该注意的问题. 标准的做法如上也就是说,标准的做法是 s.options.add();但是如果你一定要用 s.appendChild(option);注意了 ...

  7. Jquery+Ajax实现Select动态添加数据

    https://blog.csdn.net/zhengxiangwen/article/details/46480687 最近在工作中,遇到了一个关于select的问题.一般情况下,select下拉框 ...

  8. select 动态添加option函数

    转自:https://lym6520.iteye.com/blog/309937 经常会用到select动态添加元素,写了个方法,方便调用!  ... /** * 功能:select对象动态添加Opt ...

  9. [JavaScript]JS对select动态options操作[IE&FireFox兼容]

    <select id="ddlResourceType" onchange="getvalue(this)"></select>     ...

随机推荐

  1. BZOJ 3566: [SHOI2014]概率充电器 [树形DP 概率]

    3566: [SHOI2014]概率充电器 题意:一棵树,每个点\(q[i]\)的概率直接充电,每条边\(p[i]\)的概率导电,电可以沿边传递使其他点间接充电.求进入充电状态的点期望个数 糖教题解传 ...

  2. 夏令营提高班上午上机测试 Day 1 解题报告

    Day 1的题难度上来说不算太高,但是T2和T3还是有一定的思维量的. 一个比较好的开始.虽然AK的人只有几个.. (懒得去翻result了..忘了当时拿了多少分了 (哦,前两天我们机房是没有成绩的, ...

  3. jQuery源码研究——怎么看源码

    废话 这几天有想看源码的想法,于是就开始了源码的研究,经过几天的摸索发现看源码还是有点技巧在里面的,想着把这些东东写下来作为一个小总结. 在一个多月前我对Vue源码进行了一次研究,那时看源码的方式基本 ...

  4. css的浮动与定位

    显示与隐藏 标签 属性 值 效果 区别 css的style display none 元素不可见 不占页面空间 css的style visibility hidden 元素不可见 占页面空间 disp ...

  5. maven的下载安装,配置本地仓库

    maven的下载安装 下载地址:http://maven.apache.org/download.cgi 下载完成后解压到某一个目录 配置环境变量 第一个环境变量 MAVEN_HOME A:\mave ...

  6. String,StringBuffer,StringBuilder的区别

    数据结构: 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合. 比如数据库就是对硬盘中的数据进行有规则的管理,可以进行增删改查工作,而良好的数据结构可以优化这些操作, 也许大家会想这些和St ...

  7. is there any way to stop auto block

    shadowsocks出现错误日志 tail /var/log/ssserver.log 2017-07-02 12:36:31 ERROR: block all requests from 10.4 ...

  8. navcat无法远程连接mysql数据库解决办法

    navcat无法远程连接mysql数据库,一般都是因为本地ip没有访问权限,服务器上执行下面指令即可解决 mysql -u root -p GRANT ALL PRIVILEGES ON *.* TO ...

  9. NOIP 总结

    NOIP 总结 实在不知道写什么标题 决定还是把我的noip总结贴上来,毕竟保存还是挺麻烦的. 扯淡 联赛考完有三个星期了,成绩也出了一个星期左右了. 终于还是决定动笔写一点联赛的总结. Day1 可 ...

  10. 论 Java 中的内存分配

    Java内存分配主要包括以下几个区域: 1. 寄存器:我们在程序中无法控制 2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 3. 堆:存放用new产生的数据 4. 静 ...