我一直在使用只能在按键上运行的JQuery代码,除非我输入大写字母,否则它们将无法工作。其他人遇到过这个问题吗?
例如:
$(document).keypress(function(e) {
if (e.which == 70) {
console.log("test");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
仅当我键入“ F”而不是“ f”时有效
答案 0 :(得分:1)
尝试听keydown
事件而不是keypress
事件,它可以正常工作:
$(document).keydown(function(e) {
if (e.which == 70) {
console.log("test");
}
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
这有效because:
请注意,键盘按下和键盘输入提供了一个代码,该代码指示按下哪个键,而键盘输入则指示输入哪个字符。例如,小写的“ a”在按下和按下时将报告为65,但在按下时将报告为97。所有事件均将大写字母“ A”报告为65。
因此,要检查是否已按下“ f”键,请使用keydown
来检查按下的键(.which
属性将保留{{ 1}}的大写字母,无论是否按下Shift键),而“ keypress”将具有要键入的字符的keyCode
如果向下移动,则将为“ F”(键码为70,与“ f”的键码为102不同)
keyCode
$(document).keypress(function(e) {
console.log(e.which);
})
答案 1 :(得分:0)
CertainPerformance建议的keyDown
用法是绝对正确的。但是我只想在jQuery中添加有关e.which
的详细信息。
jQuery中的e.which
事件属性与vanilla JS中的{strong> ...不同。
实际上,香草JS不推荐使用它,但jQuery绝对不建议使用。
摘自jQuery的文档:
原始事件中的大多数属性都通过复制并规范化到新事件对象。
现在,如果要区分 f 和 F ,则必须在逻辑中使用e.shiftKey
属性。
< / p>
$(document).keydown(function(e) {
if (e.which == 70 && !e.shiftKey) {
console.log("Lowercase f");
}
if (e.which == 70 && e.shiftKey) {
console.log("Uppercase F");
}
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
是的……这确实令人困惑。