最近闲来无事,翻开前端修炼大法宝典(Page 521),偶然习得这样一句话,“DOM3 Event规范增加了一个名为 textInput 的事件,其在字符被输入到可编辑区域时触发。”,可我并不记得有这样的一个事件存在,啥时候整进来了的,这玩意好像是 input 事件呢。
功能验证
在浏览器快速验证一下,找一个带有 input 元素的页面(MDN 的页面就有),控制台直接开整。
const textBox = document.getElementById('text');
textBox.addEventListener('textInput', event => console.log(event));
输入框输入 after 看看有没有变化。
可以发现,它主要关注字符,只在有新字符变化的时候才触发。
始末追踪
既然浏览器响应这个事件,证明历史上存在过,或者现在依然存在可继续使用,我们往下追追看,它到底是何方神圣。
打开 caniuse 发现没有。
MDN 上搜索,发现也没有。
google 来几下,翻了好几页,发现都不对。
我这个好奇的劲就上来了,不可能书上说有,网上找不到吧,一定是姿势不对。
想起来和 input 事件差不多,就从这里下手挖掘一番,书上也提到了 DOM3 的规范,那就直接看规范。功夫不负有心人,直接上链接。
表格中提及的事件类型均已过时,只能由需要与旧版软件兼容的用户代理实现。表格主要记录这些特征的现状及其与规范性事件的关系。以及不推荐使用的事件类型的信息摘要。
有个奇怪发现,表格中有记录 keypress 事件,但它明明还能用,在项目中也常常在使用,详细阅读规范了解到,规范推荐使用
beforeinput事件代替keypress事件。
从上表中可以发现,textInput 继承自 TextEvent 接口。
TextEvent 已经废弃。
事后结论
互联网还是有记忆的,翻到了当时的 working draft,发现很多细节知识点,不再过多赘述,本文就到这。适可为止,不再往下研究,浪费太多时间,就好像已经过时废弃的 IE 浏览器,那些曾经兼容上的痛苦终归是过去了。