jQuery Event Keypress: Which key was pressed?

后端 未结 24 1980
半阙折子戏
半阙折子戏 2020-11-21 16:48

With jQuery, how do I find out which key was pressed when I bind to the keypress event?

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


        
相关标签:
24条回答
  • 2020-11-21 17:09

    edit: This only works for IE...

    I realize this is an old posting, but someone might find this useful.

    The key events are mapped, so instead of using the keycode value you can also use the key value to make it a little more readable.

    $(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
        }
    });
    

    Here is a cheat sheet with the mapped keys which I got from this blog enter image description here

    0 讨论(0)
  • 2020-11-21 17:09

    Checkout the excellent jquery.hotkeys plugin which supports key combinations:

    $(document).bind('keydown', 'ctrl+c', fn);
    
    0 讨论(0)
  • 2020-11-21 17:12

    I have just made a plugin for jQuery that allows easier keypress events. Instead of having to find the number and put it in, all you have to do is this:

    How to use it

    1. Include the code I have below
    2. Run this code:
    $(document).keydown(function(e) {
        if (getPressedKey(e) == theKeyYouWantToFireAPressEventFor /*Add 'e.ctrlKey here to only fire if the combo is CTRL+theKeyYouWantToFireAPressEventFor'*/) {
            // Your Code To Fire When You Press theKeyYouWantToFireAPressEventFor 
        }
    });
    

    It's that simple. Please note that theKeyYouWantToFireAPressEventFor is not a number, but a string (e.g "a" to fire when A is pressed, "ctrl" to fire when CTRL (control) is pressed, or, in the case of a number, just 1, no quotes. That would fire when 1 is pressed.)

    The Example/Code:

    function getPressedKey(e){var a,s=e.keyCode||e.which,c=65,r=66,o=67,l=68,t=69,f=70,n=71,d=72,i=73,p=74,u=75,h=76,m=77,w=78,k=79,g=80,b=81,v=82,q=83,y=84,j=85,x=86,z=87,C=88,K=89,P=90,A=32,B=17,D=8,E=13,F=16,G=18,H=19,I=20,J=27,L=33,M=34,N=35,O=36,Q=37,R=38,S=40,T=45,U=46,V=91,W=92,X=93,Y=48,Z=49,$=50,_=51,ea=52,aa=53,sa=54,ca=55,ra=56,oa=57,la=96,ta=97,fa=98,na=99,da=100,ia=101,pa=102,ua=103,ha=104,ma=105,wa=106,ka=107,ga=109,ba=110,va=111,qa=112,ya=113,ja=114,xa=115,za=116,Ca=117,Ka=118,Pa=119,Aa=120,Ba=121,Da=122,Ea=123,Fa=114,Ga=145,Ha=186,Ia=187,Ja=188,La=189,Ma=190,Na=191,Oa=192,Qa=219,Ra=220,Sa=221,Ta=222;return s==Fa&&(a="numlock"),s==Ga&&(a="scrolllock"),s==Ha&&(a="semicolon"),s==Ia&&(a="equals"),s==Ja&&(a="comma"),s==La&&(a="dash"),s==Ma&&(a="period"),s==Na&&(a="slash"),s==Oa&&(a="grave"),s==Qa&&(a="openbracket"),s==Ra&&(a="backslash"),s==Sa&&(a="closebracket"),s==Ta&&(a="singlequote"),s==B&&(a="ctrl"),s==D&&(a="backspace"),s==E&&(a="enter"),s==F&&(a="shift"),s==G&&(a="alt"),s==H&&(a="pause"),s==I&&(a="caps"),s==J&&(a="esc"),s==L&&(a="pageup"),s==M&&(a="padedown"),s==N&&(a="end"),s==O&&(a="home"),s==Q&&(a="leftarrow"),s==R&&(a="uparrow"),s==S&&(a="downarrow"),s==T&&(a="insert"),s==U&&(a="delete"),s==V&&(a="winleft"),s==W&&(a="winright"),s==X&&(a="select"),s==Z&&(a=1),s==$&&(a=2),s==_&&(a=3),s==ea&&(a=4),s==aa&&(a=5),s==sa&&(a=6),s==ca&&(a=7),s==ra&&(a=8),s==oa&&(a=9),s==Y&&(a=0),s==ta&&(a=1),s==fa&&(a=2),s==na&&(a=3),s==da&&(a=4),s==ia&&(a=5),s==pa&&(a=6),s==ua&&(a=7),s==ha&&(a=8),s==ma&&(a=9),s==la&&(a=0),s==wa&&(a="times"),s==ka&&(a="add"),s==ga&&(a="minus"),s==ba&&(a="decimal"),s==va&&(a="devide"),s==qa&&(a="f1"),s==ya&&(a="f2"),s==ja&&(a="f3"),s==xa&&(a="f4"),s==za&&(a="f5"),s==Ca&&(a="f6"),s==Ka&&(a="f7"),s==Pa&&(a="f8"),s==Aa&&(a="f9"),s==Ba&&(a="f10"),s==Da&&(a="f11"),s==Ea&&(a="f12"),s==c&&(a="a"),s==r&&(a="b"),s==o&&(a="c"),s==l&&(a="d"),s==t&&(a="e"),s==f&&(a="f"),s==n&&(a="g"),s==d&&(a="h"),s==i&&(a="i"),s==p&&(a="j"),s==u&&(a="k"),s==h&&(a="l"),s==m&&(a="m"),s==w&&(a="n"),s==k&&(a="o"),s==g&&(a="p"),s==b&&(a="q"),s==v&&(a="r"),s==q&&(a="s"),s==y&&(a="t"),s==j&&(a="u"),s==x&&(a="v"),s==z&&(a="w"),s==C&&(a="x"),s==K&&(a="y"),s==P&&(a="z"),s==A&&(a="space"),a}
    
    $(document).keydown(function(e) {
      $("#key").text(getPressedKey(e));
      console.log(getPressedKey(e));
      if (getPressedKey(e)=="space") {
        e.preventDefault();
      }
      if (getPressedKey(e)=="backspace") {
        e.preventDefault();
      }
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <p>The Pressed Key: <span id=key></span></p>

    Because the long version is so... well... long, I have made a PasteBin link for it:
    http://pastebin.com/VUaDevz1

    0 讨论(0)
  • 2020-11-21 17:14

    ... this example prevents form submission (regularly the basic intention when capturing keystroke #13):

    $('input#search').keypress(function(e) {
      if (e.which == '13') {
         e.preventDefault();
         doSomethingWith(this.value);
       }
    });
    
    0 讨论(0)
  • 2020-11-21 17:15

    Try this

    $('#searchbox input').bind('keypress', function(e) {
        if(e.keyCode==13){
            // Enter pressed... do anything here...
        }
    });
    
    0 讨论(0)
  • 2020-11-21 17:15

    Given that you are using jQuery, you should absolutely use .which. Yes different browsers set different properties, but jQuery will normalize them and set the .which value in each case. See documetation at http://api.jquery.com/keydown/ it states:

    To determine which key was pressed, we can examine the event object that is passed to the handler function. While browsers use differing properties to store this information, jQuery normalizes the .which property so we can reliably use it to retrieve the key code.

    0 讨论(0)
提交回复
热议问题