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 相关文章推荐
js用正则表达式来验证表单(比较齐全的资源)
Nov 17 Javascript
js使用eval解析json实例与注意事项分享
Jan 18 Javascript
Javascript模块化编程详解
Dec 01 Javascript
js全选实现和判断是否有复选框选中的方法
Feb 17 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
Mar 14 Javascript
JS实现滑动门效果的方法详解
Dec 19 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
Feb 22 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
Apr 30 Javascript
ES6 class的应用实例分析
Jun 27 Javascript
详解Vue中组件传值的多重实现方式
Aug 16 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
Apr 13 Javascript
手写Vue源码之数据劫持示例详解
Jan 04 Vue.js
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安装攻略:常见问题解答(二)
2006/10/09 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
解读Bootstrap v4 sass设计
2016/05/29 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Python拼接微信好友头像大图的实现方法
2018/08/01 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
django之自定义软删除Model的方法
2019/08/14 Python
python中Lambda表达式详解
2019/11/20 Python
Python识别html主要文本框过程解析
2020/02/18 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
shell程序中如何注释
2012/01/28 面试题
我的大学生活演讲稿
2014/04/25 职场文书
优秀语文教师事迹
2014/05/18 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
焦裕禄纪念馆观后感
2015/06/09 职场文书
《叶问2》观后感
2015/06/15 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书