【问题标题】:Keycode returns undefined and which returns 0键码返回 undefined 并且返回 0
【发布时间】:2018-01-12 04:11:12
【问题描述】:

我正在处理按键事件。我正在使用 Safari 浏览器并寻找适用于任何浏览器的功能。但是 e.keyCode 总是返回 undefined 而 e.which 总是返回 0。请在下面找到代码:

$("a,input,button,select,textarea").live('blur',
    function(e) {
        e.preventDefault();
        var key= e.keyCode || e.which;
        console.log(key);
});

有人能建议这段代码有什么问题吗?我想获取按键事件的关键代码。感谢任何帮助。

【问题讨论】:

标签: javascript jquery events keypress


【解决方案1】:

您将选择器绑定到错误的事件 - 您应该使用 keypress 之类的东西来捕获按键事件

$("a,input,button,select,textarea").live('blur keypress'
  function(e) {
    if (e.type == 'keypress') {
      e.preventDefault();
      var key= e.keyCode;
      console.log(key);
    }
    if (e.type == 'blur') {
      e.preventDefault();
      // do smthg
    }
  }
});

【讨论】:

  • 感谢您的建议。我们可以在模糊事件中包含按键事件吗?你能建议吗?
  • 事件顺序是keydownkeypresskeyup...blur 与按键完全无关...blur 是当焦点丢失在输入上时。
  • @Louys Patrice Bessette - 我知道,我刚刚回答了被问到的问题。我假设 OP 想知道按 Tab 键或箭头等是否失去焦点
  • @stackaccount:我赞成...我的评论是针对 OP。 ;)
  • @Louys Patrice Bessette - 这是解决这个问题的好方法,但我不会在我的回答中使用它 - 你最好自己做。
【解决方案2】:

您希望检测输入是否由于某个键而失去焦点...

问题是blur 事件根本与键无关。当输入失去焦点时发生的事件。

即使失去焦点的“原因”看起来是一个“标签”,也不是从事件的角度来看。

在击键时,会发生几个事件:

  1. keydown
  2. keypress
  3. keyup

如果键是“选项卡”,则会发生模糊,因为浏览器会为您执行此操作。不是按键的直接影响。

所以blur 出现在.which 信息之后并且不携带密钥。

现在要检测输入是否因按键而失去焦点,您必须“稍等片刻”并测试存在按键事件的输入是否仍处于焦点状态。 p>

要禁用特定键(及其效果),首选keydown 事件,因为该键尚未“打印”。是时候return false了。

$("input,textarea").on('keydown', function(e) {
  //e.preventDefault();
  var that = $(this);
  var key = e.which;
  console.clear();
  console.log(key);
  
  setTimeout(function(){
    if(that.is(":focus")){
      console.log("Input still in focus.");
    }else{
      console.log("Input lost focus.");
    }
  },10);
  
  // To disable a key
  if(key==70){  // key "f"
    console.log("That funny letter is forbidden");
    return false
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Try keyboard arrows, tab.<br>
The letter "f" is disabled... For fun.<br>
<br>
<input type="text" placeholder="Type something!"><br>
<br>
<textarea placeholder="Type something!"></textarea>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-28
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    相关资源
    最近更新 更多