e。仅使用大写字母

时间:2018-11-17 21:25:03

标签: javascript jquery

我一直在使用只能在按键上运行的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”时有效

2 个答案:

答案 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>

是的……这确实令人困惑。