如何使用jQuery检测键盘上的Enter键?

827

我希望能够使用jQuery检测用户是否按下了Enter键。

这是否可能?需要插件吗?

看起来我需要使用keypress()方法。

那个命令有没有浏览器问题-有没有任何浏览器兼容性问题我应该知道的?


这是关于.keypress() | jQuery API Documentation的链接。 - Haim Evgi
6
JavaScript框架中最好的一点就是它们默认情况下应该跨浏览器兼容。它们处理浏览器兼容性检查,这样用户就不必操心了。我没有阅读过jQuery的源代码,但我怀疑在这方面,键盘按键功能也不会有任何不同。 - miek
3
唯一的浏览器兼容性问题是,你应该使用e.which而不是e.keyCode来检测ASCII码。 - Daniel
1
https://dev59.com/_3VC5IYBdhLWcg3wbQXA - Lemo
20个回答

4

keypress 事件没有被任何官方规范所覆盖,因此,在使用时遇到的实际行为可能会因浏览器、浏览器版本和平台而异。

$(document).keydown(function(event) {
  if (event.keyCode || event.which === 13) {
    // Cancel the default action, if needed
    event.preventDefault();
    // Call function, trigger events and everything you want to do. Example: Trigger the button element with a click
    $("#btn").trigger('click');
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<button id="btn" onclick="console.log('Button Pressed.')">&nbsp</button>


1
需要注意的是,keypress不再在规范中(MDN)之所以被弃用的原因。 - YellowAfterlife

3

2

我使用了$(document).on("keydown")

在某些浏览器上,不支持keyCode。同样的情况还有which,所以如果不支持keyCode,则需要使用which反之亦然。

$(document).on("keydown", function(e) {
  const ENTER_KEY_CODE = 13;
  const ENTER_KEY = "Enter";
  var code = e.keyCode || e.which
  var key = e.key
  if (code == ENTER_KEY_CODE || key == ENTER_KEY) {
    console.log("Enter key pressed")
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>


1
$(document).keydown(function (event) {
      //proper indentiation of keycode and which to be equal to 13.
    if ( (event.keyCode || event.which) === 13) {
        // Cancel the default action, if needed
        event.preventDefault();
        //call function, trigger events and everything tou want to dd . ex : Trigger the button element with a click
        $("#btnsearch").trigger('click');
    }
});

0

我认为最简单的方法是使用纯JavaScript

document.onkeyup = function(event) {
   if (event.key === 13){
     alert("Enter was pressed");
   }
}

但问题说:“我想使用jQuery检测用户是否按下了Enter键。”为什么这是一个合适的解决方案呢? - Peter Mortensen

0

检测用户是否按下 Enter 键的简单方法是使用键号。 Enter 键的键号等于13。

要检查设备中键的值:

$("input").keypress(function (e) {
  if (e.which == 32 || (65 <= e.which && e.which <= 65 + 25)
                    || (97 <= e.which && e.which <= 97 + 25)) {
    var c = String.fromCharCode(e.which);
    $("p").append($("<span/>"))
          .children(":last")
          .append(document.createTextNode(c));
  } else if (e.which == 8) {
    // Backspace in Internet Explorer only is on keydown
    $("p").children(":last").remove();
  }
  $("div").text(e.which);
});

按下 Enter 键,你将得到结果为13。使用该键值,你可以调用一个函数或者做任何你想做的事情:

    $(document).keypress(function(e) {
      if(e.which == 13) {
        console.log("The user pressed the Enter key");

        // The code you want to run
      }
    });

如果你想在按下“Enter”键后定位一个按钮,你可以使用以下代码:
$(document).bind('keypress', function(e) {
  if(e.which === 13) { // Return
     $('#buttonname').trigger('click');
  }
});

0

这是我解决问题的方式。你应该使用 return false;

$(document).on('keypress', function(e) {
    if(e.which == 13) {
        $('#sub_btn').trigger('click');
        alert('You pressed the "Enter" key somewhere');
        return false;
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form action="" method="post" id="sub_email_form">
    <div class="modal-header">
        <button type="button" class="close" id="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title">Subscribe to our Technical Analysis</h4>
    </div>
    <div class="modal-body">
        <p>Signup for our regular Technical Analysis updates to review recommendations delivered directly in your inbox.</p>
        <div class="input-group">
            <input type="email" name="sub_email" id="sub_email" class="form-control" placeholder="Enter your email" required>
        </div>
        <span id="save-error"></span>
    </div>
    <div class="modal-footer">
        <div class="input-group-append">
            <input type="submit" class="btn btn-primary sub_btn" id="sub_btn" name="sub_btn" value="Subscribe">
        </div>
    </div>
</form>


0
这是一个简单的例子,展示了如何轻松地实现它。想象一下,你想要从网页的主体区域检测按键事件,
$("body").keypress(function(event) {
    console.log("This key got pressed - " + event.key);
});

这将在控制台中显示结果为“这个键被按下”+您在键盘上按下的键。

-1
$(document).keyup(function(e) {
    if(e.key === 'Enter') {
        //Do the stuff
    }
});

1
这似乎是其他答案的改编 - 你能否添加一些解释,使你的回答像其他人一样有趣? - Nico Haase

-2
$(function(){
  $('.modal-content').keypress(function(e){
    debugger
     var id = this.children[2].children[0].id;
       if(e.which == 13) {
         e.preventDefault();
         $("#"+id).click();
       }
   })
});

4
你能否为提问者添加一些解释性注释,以说明你的代码如何工作 - 谢谢。 - SaschaM78

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接