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判断页面中是否有指定控件的简单实例
Mar 04 Javascript
alert出数组中的随即值代码
Sep 25 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
Mar 05 Javascript
JS实现控制文本框的内容
Jul 10 Javascript
JavaScript仿聊天室聊天记录
Dec 27 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
Jan 23 jQuery
js中this的指向问题归纳总结
Nov 28 Javascript
从vue源码看props的用法
Jan 09 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
Nov 14 Javascript
javascript跳转与返回和刷新页面的实例代码
Nov 20 Javascript
如何HttpServletRequest文件对象并储存
Aug 14 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
Oct 29 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
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
php异常处理技术,顶级异常处理器
2012/06/13 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
2019/06/12 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
JS模式之简单的订阅者和发布者模式完整实例
2015/06/30 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
Vue2几种常见开局方式详解
2017/09/09 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
python抓取网页中的图片示例
2014/02/28 Python
Python入门篇之文件
2014/10/20 Python
使用python实现knn算法
2017/12/20 Python
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
Python如何发布程序的详细教程
2018/10/09 Python
python中的协程深入理解
2019/06/10 Python
使用Python在Windows下获取USB PID&VID的方法
2019/07/02 Python
keras 多gpu并行运行案例
2020/06/10 Python
降低python版本的操作方法
2020/09/11 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
学院书画协会部门岗位职责
2013/12/01 职场文书
学习党课思想汇报
2013/12/29 职场文书
大学生自我鉴定书
2014/03/24 职场文书