IE6/7/8中Option元素未设value时Select将获取空字符串


Posted in Javascript onApril 07, 2011

如下

<!DOCTYPE HTML> 
<html> 
<head> 
<title>IE6/7/8中Option元素未设value时Select将获取空字符串</title> 
</head> 
<body> 
<select onchange="alert(this.value)"> 
<option>one</option> 
<option>two</option> 
<option>three</option> 
</select> 
</body> 
</html>

当触发change事件时,各浏览器中测试结果如下:
IE6/7/8 : 弹出空字符串
IE9/Firefox/Safari/Chrome/Opera : 弹出对应的option元素的innerText值。

很明显,IE9/Firefox/Safari/Chrome/Opera 的实现有一定道理。即当option的value和option的innerText相同时可以省略掉其value不写。这样更简洁。可惜 IE6/7/8 不支持这么写。为保证兼容所有浏览器,书写option时务必别少了value属性。

把上面的html代码稍作修改

<select onchange="alert(this.value)"> 
<option value="1">one</option> 
<option>two</option> 
<option>three</option> 
</select>

给第一个option添加了value属性。这时测试步骤如下
1,选择two
2,选择one

两次弹出的结果如下:
IE6/7/8 : [空字符串,1]
IE9/Firefox/Safari/Chrome/Opera : [two,1]

从结果上可以看出各浏览器的实现大概如下:

IE6/7/8中,如果option没有value值,那么将返回空字符串。
IE9/Firefox/Safari/Chrome/Opera 中先取option的value值,如果没有value属性,则取option的innerText值。

再修改下代码

<select onchange="alert(this.value.length)"> 
<option value="1">one</option> 
<option> two </option> 
<option>three</option> 
</select>

与上一步相比,第二个option的two两边加了空格。这次我们alert出value的长度。选择two。这时各浏览器中弹出结果如下
IE6/7/8 : 0
IE9/Firefox/Safari/Chrome/Opera : 3

IE6/7/8 中对于没有value属性的option返回空字符串,其length自然是0。这次测试关注的主要是IE9/Firefox/Safari/Chrome/Opera 这些现代浏览器。它们中返回的都是3却不是5。可以看到这些浏览器内部将two两边的空白符去掉了(trim)。

上一个测试已经提到了IE9/Firefox/Safari/Chrome/Opera中先取option的value,value属性没有再取option的innerText值。对于没有设置value属性的option,它们努力将其innerText作为value返回,甚至会自动去掉两边的空白符。

以上一直提到返回option的innerText,却不是innerHTML。再修改下代码

<select onchange="alert(this.value)"> 
<option value="1">one</option> 
<option><span>two</span></option> 
<option>three</option> 
</select>

第二个option没有value属性,其内是个span元素。这时选择two。在IE9/Firefox/Safari/Chrome/Opera中弹出的仍然是“two”,而不是“<span>two</span>”。如果alert出其length会发现仍然是3,而不是“<span>two</span>”的长度16。

可以看到当忘记写option的value时这些现代浏览器都会尽量返回正确的(客户端程序员想要的)结果value,其容错性比IE6/7/8做的更好。

相关:
各浏览器中option元素的表现差异

Javascript 相关文章推荐
基于jquery的3d效果实现代码
Mar 23 Javascript
javascript显示上周、上个月日期的处理方法
Feb 03 Javascript
JS实现JSON.stringify的实例代码讲解
Feb 07 Javascript
node.js连接MongoDB数据库的2种方法教程
May 17 Javascript
Ionic2开发环境搭建教程
Aug 20 Javascript
Angular在模板驱动表单中自定义校验器的方法
Aug 09 Javascript
详解react服务端渲染(同构)的方法
Sep 21 Javascript
使用Electron构建React+Webpack桌面应用的方法
Dec 15 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
Feb 10 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
May 07 Javascript
解决vue项目router切换太慢问题
Jul 19 Javascript
javascript实现雪花飘落效果
Aug 19 Javascript
我的javascript 函数链之演变
Apr 07 #Javascript
JavaScript中链式调用之研习
Apr 07 #Javascript
js中各浏览器中鼠标按键值的差异
Apr 07 #Javascript
javascript 单例/单体模式(Singleton)
Apr 07 #Javascript
Safari5中alert的无限循环BUG
Apr 07 #Javascript
JQuery中html()方法使用不当带来的陷阱
Apr 07 #Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
Apr 07 #Javascript
You might like
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
PHP如何使用Memcached
2016/04/05 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
利用JS实现简单的瀑布流加载图片效果
2017/04/22 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
Python read函数按字节(字符)读取文件的实现
2019/07/03 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
美国排名第一的葡萄酒俱乐部:Firstleaf Wine Club
2020/01/02 全球购物
应届生的求职推荐信范文
2013/11/30 职场文书
竞选班长自荐书范文
2014/03/09 职场文书
大学生两会精神学习心得体会
2014/03/10 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
最感人的道歉情书
2015/05/12 职场文书
爱国主义电影观后感
2015/06/18 职场文书
MongoDB数据库的安装步骤
2021/06/18 MongoDB
Python3中最常用的5种线程锁实例总结
2021/07/07 Python