js change,propertychange,input事件小议


Posted in Javascript onDecember 20, 2011

https://github.com/mootools/mootools-core/issues/2170

这个问题来自IE(LTE8)中对checkbox和radio change事件的实现问题,在IE(LTE8)中测试下来,当你点击一个checkbox或者radio,它的change事件是不会立即触发,除非你让它失去焦点,而在其他标准浏览器中(包括IE9),是点击后立即触发change事件的,这的确是个蛋疼的问题,说到解决方法,倒也比较容易,用IE(LTE8)中元素特有的propertychange事件来处理(IE9已经没这玩意儿了),就能避免上述问题,如:

checkEl.attachEvent('onpropertychange', function() { 
console.log('hey man, I am changed'); 
});

但是这样就认为解决了,是不充分的,因为像checkEl.setAttribute('data-value', 'god')这样的操作也会触发其propertychange事件,所以我们需要用其event.propertyName来判断下,如:
checkEl.attachEvent('onpropertychange', function() { 
if(window.event.propertyName == 'checked') 
console.log('blah blah blah...'); 
});

这样算是可以了。由此展开我又测试了下select,其change事件的表现在不同浏览器中一致,没有出现非要先失去焦点的情况。我又测试了下input[type="text"],它的change事件是我们所熟悉的,要失去焦点才会触发,那么当我们想让它一输入东西就立即触发呢,参考之前的例子在IE(LTE8)中,我们可以用propertychange来实现,只不过propertyName的条件变成‘value'而已。在其他标准浏览器中(包括IE9),我们可以用HTML5中的一个标准事件input, 如:
inputEl.addEventListener('input', function(event) { 
console.log('input event fired'); 
}, false);

这样我们的每一次输入都会触发此事件,有人会说为什么不用keyup来监听一下, 这里有篇文章(原文链接)对此问题进行了阐述,感兴趣的也可以读读。
Javascript 相关文章推荐
jQuery使用animate创建动画用法实例
Aug 07 Javascript
jQuery EasyUI Dialog拖不下来如何解决
Sep 28 Javascript
JavaScript File API实现文件上传预览
Feb 02 Javascript
jquery设置表单元素为不可用的简单代码
Jul 04 Javascript
jQuery 的 ready()的纯js替代方法
Nov 20 Javascript
使用vue.js实现联动效果的示例代码
Jan 10 Javascript
利用js定义一个导航条菜单
Mar 14 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
Apr 07 Javascript
angular-ngSanitize模块-$sanitize服务详解
Jun 13 Javascript
vue 组件中slot插口的具体用法
Apr 03 Javascript
vue弹窗插件实战代码
Sep 08 Javascript
一百行JS代码实现一个校验工具
Apr 30 Javascript
JavaScript面向对象设计二 构造函数模式
Dec 20 #Javascript
Javascript面向对象设计一 工厂模式
Dec 20 #Javascript
用JavaScript仿PS里的羽化效果代码
Dec 20 #Javascript
javascript判断iphone/android手机横竖屏模式的函数
Dec 20 #Javascript
五段实用的js高级技巧
Dec 20 #Javascript
更换select下拉菜单背景样式的实现代码
Dec 20 #Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
Dec 20 #Javascript
You might like
用PHP和ACCESS写聊天室(七)
2006/10/09 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
javascript[js]获取url参数的代码
2007/10/17 Javascript
javascript随机之洗牌算法深入分析
2014/06/07 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
JS引用传递与值传递的区别与用法分析
2018/06/01 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python 连连看连接算法
2008/11/22 Python
Python3.7中安装openCV库的方法
2018/07/11 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
你的自行车健身专家:FaFit24
2016/11/16 全球购物
PacSun官网:加州生活方式服装、鞋子和配饰
2018/03/10 全球购物
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
新西兰优惠网站:Treat Me
2019/07/04 全球购物
法人授权委托书格式
2014/04/08 职场文书
三年级小学生评语
2014/04/22 职场文书
政府门卫岗位职责
2014/04/29 职场文书
星级党支部申报材料
2014/05/31 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
北京青年观后感
2015/06/15 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS