Keycode返回undefined,返回0

时间:2018-01-12 04:11:12

标签: javascript jquery events keypress

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

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

有没有人建议这段代码有什么不对?我想获得按键事件的关键代码。感谢任何帮助。

2 个答案:

答案 0 :(得分: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
    }
  }
});

答案 1 :(得分:1)

您希望检测输入丢失的焦点是否属于某个键...

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

即使"原因"失去的焦点似乎是一个"标签",它不是事件的观点。

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

  1. keydown
  2. keypress
  3. keyup
  4. 如果密钥是"标签"则会出现模糊,因为浏览器会为您执行此操作。这不是关键的直接影响。

    因此,blur发生在.which之后,并且不会传输密钥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>
    &#13;
    {{1}}
    &#13;
    &#13;
    &#13;