input/change/composition/keydown事件详解

你知道这些事件都在什么时候触发么?

30秒速答:

input事件在用户行为导致input | select | textareavalue改变时触发。

change事件在用户行为导致input | select | textareavalue改变 && (失去焦点 || 回车)时触发。

composition事件在输入法编辑器输入字符后触发。

keydown事件在按下键盘按键后触发。

扩展阅读

详细介绍各个事件的不同。

input

input是理想的文本内容变化监听事件,可以在内容改变后实时触发。

IE9以下浏览器不支持input事件,可以使用IE特有的propertychange事件替代。

这两个事件的区别为:

  • input事件仅在用户输入导致value属性变化时触发,通过js改变属性无法触发。

  • propertychange事件当任何属性改变都会触发。

change

change事件触发时机根据表单元素type与用户交互决定。

  • 对于typeradio | checkboxinput,当元素:checked时触发(通过点击或者使用键盘)

  • 对于需要选择的表单元素,当用户完成提交时触发,例如:

  1. 点击select中的选项。

  2. input[type="date"]选择了一个日期。

  3. 通过input[type="file"]上传了一个文件。

  • 对于textarea或者input[type="text"],当文本内容变化 && (失去焦点 || 回车)时触发。

React中的onChange事件行为同原生的input事件相同

composition

compositionstartcompositionupdatecompositionend组成的复合事件。会在输入法编辑器输入时触发。

对于中文来说,即从输入字母出现中文输入法到输出中文的过程。

这三个事件分别会在输入法输入时/输入中/输入完成触发。

如上图,输入数字并不会触发composition,有输入法编辑器时才会触发。

keydown

从按钮按下到弹起,会依次触发keydownkeypresskeyup事件。

  • 其中keydown会在按下任意字符后触发,keyup会在按键弹起后触发(chrome下中/英切换按钮弹起不会触发keyup)。

  • keypress会在按下可显示内容(数字/字母/符号)后在keydown之后触发。shift | meta等不会产生实际内容的按钮不会触发keypress

keypress事件已经不被推荐使用,可以使用beforeinput替代。

事件触发顺序

对于input[type="text"]当没有输入中文时,事件触发顺序为:

  1. keydown

  2. keypress

  3. beforeinput

  4. input

  5. keyup

  6. 失去焦点 change

当使用输入法输入w,并最终输出时,事件触发顺序如图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值