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 使用手册(六)
Sep 23 Javascript
onsubmit阻止form表单提交与onclick的相关操作
Sep 03 Javascript
一个简单的JS鼠标悬停特效具体方法
Jun 17 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
Jul 18 Javascript
再谈javascript原型继承
Nov 10 Javascript
jQuery对象的链式操作用法分析
May 10 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
Apr 23 Javascript
常用Javascript函数与原型功能收藏(必看篇)
Oct 09 Javascript
JavaScript定时器实现的原理分析
Dec 06 Javascript
微信小程序图片宽100%显示并且不变形
Jun 21 Javascript
详解Angular6 热加载配置方案
Aug 18 Javascript
有趣的JavaScript隐式类型转换操作实例分析
May 02 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面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
php array_keys 返回数组的键名
2016/10/25 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
2016/07/27 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
jquery获取img的src值实例介绍
2019/01/16 jQuery
jQuery each和js forEach用法比较
2019/02/27 jQuery
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
python处理xml文件的方法小结
2017/05/02 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
解决Django连接db遇到的问题
2019/08/29 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
python实现录屏功能(亲测好用)
2020/03/02 Python
利用python实现平稳时间序列的建模方式
2020/06/03 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
九年级语文教学反思
2014/02/04 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
医德考评自我评价
2014/09/14 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书