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代码优化 选择符篇
Nov 01 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
Feb 26 Javascript
浅谈javascript属性onresize
Apr 20 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
May 09 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
Jul 05 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
Aug 11 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
Oct 30 Javascript
JavaScript之map reduce_动力节点Java学院整理
Jun 29 Javascript
webpack4打包vue前端多页面项目
Sep 17 Javascript
Vue使用axios出现options请求方法
May 30 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
Sep 07 Javascript
Vue组件生命周期运行原理解析
Nov 25 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
解析关于wamp启动是80端口被占用的问题
2013/06/21 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
php json转换相关知识(小结)
2018/12/21 PHP
js电信网通双线自动选择技巧
2008/11/18 Javascript
jquery 注意事项与常用语法小结
2010/06/07 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
2015/05/05 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
python版学生管理系统
2018/01/10 Python
python绘制立方体的方法
2018/07/02 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
利用python生成照片墙的示例代码
2020/04/09 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
Python执行时间的几种计算方法
2020/07/31 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
python 实现批量图片识别并翻译
2020/11/02 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
2013年保送生自荐信格式
2013/11/20 职场文书
高二历史教学反思
2014/01/25 职场文书
房屋买卖协议书范本
2014/04/10 职场文书
弘扬雷锋精神演讲稿
2014/05/10 职场文书
学校宣传标语
2014/06/18 职场文书
2014年招生工作总结
2014/11/26 职场文书
逃课检讨书范文
2015/05/06 职场文书
Java数据结构之堆(优先队列)
2022/05/20 Java/Android