使用jQuery,我如何找到哪个键被按下时,我绑定到按键事件?

$('#searchbox input').bind('keypress', function(e) {});

我想在按下ENTER键时触发提交。

(更新)

尽管我自己找到了(或者更好的:一个)答案,但似乎还有变化的空间;)

keyCode和它之间有区别吗?特别是如果我只找ENTER,它永远不会是unicode键?

是否有些浏览器提供一种属性,而其他浏览器提供另一种?


当前回答

$(document).ready(function(){
    $("#btnSubmit").bind("click",function(){$('#'+'<%=btnUpload.ClientID %>').trigger("click");return false;});
    $("body, input, textarea").keypress(function(e){
        if(e.which==13) $("#btnSubmit").click();
    });
});

希望这对你有所帮助!!

其他回答

试试这个

$('#searchbox input').bind('keypress', function(e) {
    if(e.keyCode==13){
        // Enter pressed... do anything here...
    }
});

根据Kilian的回答:

如果只输入按键很重要:

<form action="javascript:alert('Enter');">
<input type=text value="press enter">
</form>
 // in jquery source code...
 if (!event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode)) {
     event.which = event.charCode || event.keyCode;
 }

 // So you have just to use
 $('#searchbox input').bind('keypress', function(e) {
     if (e.which === 13) {
         alert('ENTER WAS PRESSED');
     }
 });

编辑:这只适用于IE…

我知道这是一个旧帖子,但有人可能会发现这很有用。

键事件是映射的,所以除了使用keycode值,还可以使用key值使其更具可读性。

$(document).ready( function() {
    $('#searchbox input').keydown(function(e)
    {
     setTimeout(function ()
     { 
       //rather than using keyup, you can use keydown to capture 
       //the input as it's being typed.
       //You may need to use a timeout in order to allow the input to be updated
     }, 5);
    }); 
    if(e.key == "Enter")
    {
       //Enter key was pressed, do stuff
    }else if(e.key == "Spacebar")
    {
       //Spacebar was pressed, do stuff
    }
});

这里是一个小抄与映射键,我从这个博客

... 这个例子阻止表单提交(通常是捕获击键#13时的基本意图):

$('input#search').keypress(function(e) {
  if (e.which == '13') {
     e.preventDefault();
     doSomethingWith(this.value);
   }
});