为什么“输入”事件不会在文件输入上触发,但“更改”事件会触发

Why do 'input' events not fire on file inputs, but 'change' events do?

本文关键字:事件 输入 更改 为什么 文件      更新时间:2023-09-26

测试一个简单的输入:

<input type="file"/>

选择新文件时,不会触发 input 事件:

$('input').on('input', function(event){
    console.log('input value changed', event.target.value)
})

http://jsfiddle.net/baLn0sfy/

change事件触发:

$('input').on('change', function(event){
    console.log('input value changed', event.target.value)
})

http://jsfiddle.net/fzegLugd/

为什么"输入"事件不触发?

根据

W3.org,对于文件输入,"输入事件不适用"。(请参阅簿记详细信息下的最后一个项目符号)。

输入事件支持的元素仅限于 textArea,输入类型=文本,或输入类型=密码。从 MSDN:

更改

元素的文本内容时发生输入事件 通过用户界面。

您可以使用 oninput 来检测文本区域的内容何时, 输入类型=文本,或输入类型=密码已更改。此事件 修改后立即发生,与 OnChange 事件不同, 当元素失去焦点时发生。