总结oninput、onchange与onpropertychange事件的用法和区别
前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数。过去一般都使用onchange/onkeyup/onkeypress/onkeydown实现,但是这存在着一些不好的用户体验。比如onchange事件只在键盘或者鼠标操作改变对象属性,且失去焦点时触发,脚本触发无效;而onkeydown/onkeypress/onkeyup在处理复制、粘贴、拖拽、长按键(按住键盘不放)等细节上并不完善。
onpropertychange属性可在某些情况下解决上面存在的问题,不用考虑是否失去焦点,不管js操作还是键盘鼠标手动操作,只要HTML元素属性发生改变即可立即捕获到。遗憾的是,onpropertychange为IE专属的。其他浏览器下如果想要实现这一实时监听的需求,就要用到HTML5中的标准事件oninput,不过IE9以下的浏览器是不支持oninput事件的。
所以我们需要综合oninput和onpropertychange二者来实现文本区域实时监听的功能。举例如下:
例1、对支持oninput的浏览器用oninput,其他浏览器(IE6/7/8)使用onpropertychange:
var testinput = document.createElement('input');
if('oninput' in testinput){object.addEventListener("input",fn,false);
}else{object.onpropertychange = fn;
}
例2、对所有ie使用onpropertychange,其他浏览器用oninput:
var ie = !!window.ActiveXObject;
if(ie){object.onpropertychange = fn;
}else{object.addEventListener("input",fn,false);
}
汇总onchange onpropertychange 和oninput事件的区别:
下面引用一篇译文:
HTML5将oninput事件标准化了,该事件用来检测用户的输入状态。当然,通过使用onkeydown
或者onkeyup
作为代替也是可以的。这些事件设计本意也并非如此,参见详情。
所有的现代浏览器支持 oninput
,其中包括IE9。对于那些老式浏览器,在不支持该事件时用 keydown
作为优雅降级。不幸的是,检测浏览器对该 oninput
事件的支持性并不容易。假定浏览器支持 oninput
,那么以下这段js代码的返回值为 true
,否则为 false
。
'oninput' in document.createElement('input')
这段代码在大多数浏览器中正常运行,除了 Firefox( 见 bug #414853 ),故仍旧需要 为oninput作浏览器特性检测 。除此以外就没必要为其他浏览器作特性检测了,只需为 input
和 keydown
绑定事件,并在 oninput
事件触发之后删除 onkeydown
即可。示例如下:
someElement.oninput = function() {el.onkeydown = null;// Your code goes here
};
someElement.onkeydown = function() {// Your code goes here
}
keydown
事件仅会被触发一次(在oninput
事件触发前),之后再触发oninput
。虽然并不完美,但总比写上一大堆oninput
特性检测代码要好些吧。
译文部分转自:http://blog.163.com/jinlu_hz/blog/static/1138301522011431102044154/
译文原地址:http://mathiasbynens.be/notes/oninput
译文原作者:mathias
总结oninput、onchange与onpropertychange事件的用法和区别相关推荐
- 【转】总结oninput、onchange与onpropertychange事件的用法和区别
经本人测试在chrome下的从历史记录中选取值的时候也户触发input事件 前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数.过 ...
- 实时监听文本框输入 oninput、onchange与onpropertychange事件的用法和区别
前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onke ...
- oninput事件onpropertychange事件onchange事件textIput事件
oninput事件&onpropertychange事件&onchange事件&textIput事件 oninput事件 简介 input,select,textarea元素值 ...
- onchange事件与onpropertychange事件的区别
onchange事件与onpropertychange事件的区别 1.onchange事件与onpropertychange事件的区别:onchange事件在内容改变(两次内容有可能还是相等的)且失去 ...
- onchange、onpropertychange和oninput
1.onchange事件与onpropertychange事件的区别: onchange事件在内容改变(两次内容有可能还是相等的)且失去焦点时触发:onpropertychange事件却是实时触发, ...
- JS中onpropertychange事件和onchange事件区别
2019独角兽企业重金招聘Python工程师标准>>> 当一个HTML元素的属性用js改变的时候,都能通过 onpropertychange来捕获.例如一个 <input na ...
- onpropertychange事件
document.getElementById('updatelog').attachEvent('onpropertychange', function(o) {if (o.propertyName ...
- javascript中的onpropertychange事件 与 jquery中的propertychange事件
2019独角兽企业重金招聘Python工程师标准>>> jquery 中的propertychange事件不兼容IE9 而javascript中的onpropertychange事 ...
- 解决ie8下onpropertychange事件间歇性失效的问题
有的时候onpropertychange事件一下好用,一下不好用 网上有的说去掉<!DOCTYPE html>就好了, 我试了下,虽然然管用,但doctype是推荐加上的,去掉他有些东西会 ...
- c# 事件和委托的区别,使用事件的好处
网上一些介绍事件 (event) 的文章让人看来觉得事件和委托好像有很大的不同.通常,事件被作为一种特殊的类型或结构来看待.但事实上,事件只是委托的一个修饰符 (modifier),此外编译器增加了一 ...
最新文章
- Android面试题大集合
- 互联网协议 — TCP — 滑动窗口(网络质量保障)
- MinGW:sjlj vs dwarf vs seh有什么区别?
- mysql f_MySQL
- GLSL中 Billboard和Point的顶点空间变换
- mysql导出表部分数据
- Python 工匠: 异常处理的三个好习惯
- 仅此一文让你明白ASP.NET MVC原理
- gitlab和github一起使用
- pandas df.loc
- cs229 学习笔记四 学习理论
- linux下好看的中文字体,推荐一款 Linux 上比较漂亮的字体(转)
- Ajax原生XHR和Promise 学习
- 各大主流社交软件显示ip地址-如何实现ip飘移
- python 判断一个list列表是否包含另一个list列表
- python插入excel文件数据(递增+随机)
- 蓝桥杯——单片机设计与开发初学者必备资料
- excel 文件工作表保护密码破解
- AFNetworking(v3.1.0) 源码解析
- Linux 学习“安装CentOS与多重引导小技巧”
热门文章
- SaaSBase:最适合小团队轻量级项目管理的软件——Tower
- mysql没有卸载干净服务还启动着,MySQL卸载不干净,真的让人很头大
- 强化学习之Q-learning简介
- win10安装MySQL5.7教程,linux安装MySQL教程,SQLyog安装教程
- 文字时钟罗盘动态html代码_抖音时钟原生JS文字钟源码下载
- 斐讯盒子t1 刷Android,T1刷机的详细步骤
- hnust 数据挖掘原理与算法期中考试复习资料
- vue 图片拖拉转放大缩小组件
- 云计算决策指南:解析医疗的7大解决方案
- 昆仑通态通用版找不到驱动_昆仑通态无法连接1200