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 相关文章推荐
Javascript 函数对象的多重身份
Jun 28 Javascript
js css样式操作代码(批量操作)
Oct 09 Javascript
初识SmartJS - AOP三剑客
Jun 08 Javascript
javascript格式化日期时间方法汇总
Jun 19 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
Jul 22 Javascript
基于Angular.js实现的触摸滑动动画实例代码
Feb 19 Javascript
laravel5.4+vue+element简单搭建的示例代码
Aug 29 Javascript
在Vue组件中获取全局的点击事件方法
Sep 06 Javascript
vue路由前进后退动画效果的实现代码
Dec 10 Javascript
Flutter实现仿微信底部菜单栏功能
Sep 18 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
Jul 19 Javascript
为什么node.js不适合大型项目
Apr 28 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+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
深入剖析PHP中printf()函数格式化使用
2016/05/23 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
Laravel如何自定义command命令浅析
2019/03/23 PHP
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
Python中字典和集合学习小结
2017/07/07 Python
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
2020/08/07 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
信息科学与技术专业求职信范文
2014/02/20 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
国庆促销活动总结
2014/08/29 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
2015年客服工作总结范文
2015/04/02 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书