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 相关文章推荐
通过Unicode转义序列来加密,按你说的可以算是混淆吧
May 06 Javascript
JavaScript中使用构造函数实现继承的代码
Aug 12 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
Mar 21 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
May 18 Javascript
AngularJS 如何在控制台进行错误调试
Jun 07 Javascript
jquery仿苹果的时间/日期选择效果
Mar 08 Javascript
详解vue express启动数据服务
Jul 05 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
Aug 04 jQuery
vue2.0 父组件给子组件传递数据的方法
Jan 15 Javascript
vue下axios拦截器token刷新机制的实例代码
Jan 17 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
May 21 Javascript
JavaScript圣杯布局与双飞翼布局实现案例详解
Aug 05 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
如何将数据从文本导入到mysql
2006/10/09 PHP
php判断linux下程序问题实例
2015/07/09 PHP
php strftime函数的详细用法
2018/06/21 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
div移动 输入框不能输入的问题
2009/11/19 Javascript
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
angular动态删除ng-repaeat添加的dom节点的方法
2017/07/20 Javascript
微信小程序实现类似微信点击语音播放效果
2020/03/30 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
django 模型字段设置默认值代码
2020/07/15 Python
python实现简单遗传算法
2020/09/18 Python
python 如何实现遗传算法
2020/09/22 Python
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
运动会入场解说词300字
2014/01/25 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
作风建设年活动总结
2014/08/27 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python