这三个事件有什么区别?谷歌搜索后,我发现:
onKeyDown当用户按下某个键时触发该事件。onKeyUp当用户松开按键时触发该事件。onKeyPress当用户按下并释放某个键(onKeyDown后跟onKeyUp)时触发该事件。
我理解前两个,但不onKeyPress一样onKeyUp吗?是否可以在onKeyUp不按下( ) 的情况下释放键( onKeyDown)?
这有点令人困惑,有人可以帮我解决这个问题吗?
这三个事件有什么区别?谷歌搜索后,我发现:
onKeyDown当用户按下某个键时触发该事件。onKeyUp当用户松开按键时触发该事件。onKeyPress当用户按下并释放某个键(onKeyDown后跟onKeyUp)时触发该事件。
我理解前两个,但不onKeyPress一样onKeyUp吗?是否可以在onKeyUp不按下( ) 的情况下释放键( onKeyDown)?
这有点令人困惑,有人可以帮我解决这个问题吗?
注意 KeyPress现在已弃用。使用KeyDown来代替。
KeyPress、KeyUp和KeyDown分别类似于:Click、MouseUp,和MouseDown。
Down 先发生Press 第二次发生(输入文本时)Up 最后发生(当文本输入完成时)。keydown
keypress
textInput
keyup
以下是您可以在事件触发时自己查看的片段:
window.addEventListener("keyup", log);
window.addEventListener("keypress", log);
window.addEventListener("keydown", log);
function log(event){
console.log( event.type );
}
在此处查看此答案中最初使用的存档链接。
从该链接:
理论上,
onKeyDown和onKeyUp事件代表按键被按下或释放,而onKeyPress事件代表正在输入一个字符。该理论的实现在所有浏览器中并不相同。
大部分的答案在这里更侧重于理论而不是实际的问题,并有存在着很大的差异keyup,并keypress因为它涉及到输入字段值,至少在Firefox(43测试)。
如果用户1输入一个空的 input 元素:
输入元素的值将是keypress处理程序内的空字符串(旧值)
输入元素的值将是处理程序1内的(新值)keyup。
如果您正在做一些依赖于知道输入后的新值而不是当前值(例如内联验证或自动制表符)的操作,这一点至关重要。
设想:
12345输入元素。12345。A。当keypress输入字母后事件触发时A,文本框现在只包含字母A。
但:
12345.5因此,浏览器(Firefox 43)似乎会擦除用户的选择,然后触发keypress事件,然后更新字段内容,然后触发keyup.
onkeydown当键按下时触发(就像在快捷键中一样;例如, in Ctrl+A,Ctrl被按住“按下”。
onkeyup 释放键时触发(包括修饰符/等键)
onkeypress被烧制的组合onkeydown和onkeyup,或根据键盘重复(当onkeyup不触发)。(这种重复行为是我没有测试过的。如果你做了测试,请添加评论!)
textInput(仅限 webkit)在输入某些文本时触发(例如,Shift+A将输入大写的“A”,但Ctrl+A会选择文本而不输入任何文本输入。在这种情况下,将触发所有其他事件)
首先,它们有不同的含义:它们开火:
其次,某些键会触发其中一些事件,而不会触发其他事件。例如,
此外,您应该记住,event.keyCode(和event.which)通常对于 KeyDown 和 KeyUp 具有相同的值,但对于 KeyPress 具有不同的值。试试我创建的游乐场。顺便说一下,我注意到了一个奇怪的现象:在 Chrome 中,当我按下ctrl+a并且input/textarea为空时,KeyPress 会以event.keyCode(和event.which)等于1! (当输入不为空时,它根本不会触发)。
最后,还有一些语用学:
textarea,KeyPress 和 KeyDown 都会触发多次(Chrome 71),如果我需要多次触发的事件和 KeyUp 用于单键释放,我会使用 KeyDown。inputs 和textareas 在不同浏览器中的行为不同(主要是由于失去焦点)我在我的项目中使用了所有 3 个,但不幸的是可能忘记了一些语用学。(要注意:还有input和change事件)