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 相关文章推荐
javascript 静态对象和构造函数的使用和公私问题
Mar 02 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
Aug 22 Javascript
今天是星期几的4种JS代码写法
Sep 17 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
Jul 01 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
Oct 01 Javascript
微信小程序 空白页重定向解决办法
Jun 27 Javascript
Node.js应用设置安全的沙箱环境
Apr 23 Javascript
微信小程序实现的图片保存功能示例
Apr 24 Javascript
node.js ws模块搭建websocket服务端的方法示例
Apr 25 Javascript
原生js实现商品筛选功能
Oct 28 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
Jun 15 Javascript
Openlayers测量距离与面积的实现方法
Sep 25 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
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
用PHP生成html分页列表的代码
2007/03/18 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
利用Laravel生成Gravatar头像地址的优雅方法
2017/12/30 PHP
js注意img图片的onerror事件的分析
2011/01/01 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
13个PHP函数超实用
2015/10/21 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
Python的Flask框架的简介和安装方法
2015/11/13 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
python简单实例训练(21~30)
2017/11/15 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
python得到电脑的开机时间方法
2018/10/15 Python
python输入错误后删除的方法
2019/10/12 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
python获取array中指定元素的示例
2019/11/26 Python
Python猴子补丁知识点总结
2020/01/05 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
网络教育毕业生自我鉴定
2013/10/10 职场文书
交通文明倡议书
2014/05/16 职场文书
技术入股合作协议书
2014/10/07 职场文书
2015初中团委工作总结
2015/07/28 职场文书
小学语文教师研修日志
2015/11/13 职场文书
外出培训学习心得体会
2016/01/18 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
python 三边测量定位的实现代码
2021/04/22 Python
redis缓存存储Session原理机制
2021/11/20 Redis
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技