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 相关文章推荐
Gird组件 Part-3:范例RSSFeed Viewer
Mar 10 Javascript
javascript 动态生成私有变量访问器
Dec 06 Javascript
javascript权威指南 学习笔记之javascript数据类型
Sep 24 Javascript
一个简单的js树形菜单
Dec 09 Javascript
jquery设置元素的readonly和disabled的写法
Sep 22 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
Sep 22 Javascript
JS将unicode码转中文方法
May 08 Javascript
Vue修改mint-ui默认样式的方法
Feb 03 Javascript
React 组件转 Vue 组件的命令写法
Feb 28 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
May 08 Javascript
微信小程序自定义键盘 内部虚拟支付
Dec 20 Javascript
JavaScript实现的拼图算法分析
Feb 13 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
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
JavaScript中的私有成员
2006/09/18 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
js和jquery对dom节点的操作(创建/追加)
2013/04/21 Javascript
javascript实现微信分享
2014/12/23 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
js密码强度校验
2015/11/10 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
JavaScript中Math对象的方法介绍
2017/01/05 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
[05:56]第十六期——新进3大C之小兔基
2014/06/24 DOTA
Python中获取网页状态码的两个方法
2014/11/03 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
python requests指定出口ip的例子
2019/07/25 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
对python中的装包与解包实例详解
2019/08/24 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
python数据预处理方式 :数据降维
2020/02/24 Python
python实现批量转换图片为黑白
2020/06/16 Python
python怎么对数字进行过滤
2020/07/05 Python
AssertionError 跟一下那个类是 “is – a”的关系
2012/02/21 面试题
金融专业个人求职信
2013/09/22 职场文书
幼儿园教研工作总结2015
2015/05/12 职场文书
结婚主持人致辞
2015/07/28 职场文书