总结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
事件的支持性并不easy。
假定浏览器支持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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架