414

I'm trying to do a function if enter is pressed while on specific input.

What I'm I doing wrong?

$(document).keyup(function (e) {
    if ($(".input1").is(":focus") && (e.keyCode == 13)) {
        // Do something
    }
});

Is there a better way of doing this which would say, if enter pressed on .input1 do function?

jQuerybeast
  • 14,130
  • 38
  • 118
  • 196

12 Answers12

671
$(".input1").on('keyup', function (e) {
    if (e.key === 'Enter' || e.keyCode === 13) {
        // Do something
    }
});

// e.key is the modern way of detecting keys
// e.keyCode is deprecated (left here for for legacy browsers support)
// keyup is not compatible with Jquery select(), Keydown is.
Paweł Gościcki
  • 9,066
  • 5
  • 70
  • 81
Joseph Silber
  • 214,931
  • 59
  • 362
  • 292
  • Which browser were you testing it in? I think older versions of IE don't trigger keyup events on the document (not sure about this though). – Joseph Silber Aug 15 '11 at 00:47
  • 2
    Your code wasnt working because you used .is() and needed === rather than ==. See my answer for some more details. – wesbos Aug 15 '11 at 00:48
  • BTW If the form happens to submit because youve pressed enter, the keyup event doesnt get fired - the input looses focus. in my firefox. – commonpike Apr 02 '13 at 22:19
  • I'd recommend to use `$('.input1').on('keyup', function (e) {});` instead for better compatibility. – Daniel Dewhurst Oct 10 '16 at 12:56
  • 4
    Properties `which`, `code`, `charCode` and `keyCode` is deprecated https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent, please add actual information to your answer. – Sasay Oct 03 '19 at 17:34
229

event.key === "Enter"

More recent and much cleaner: use event.key. No more arbitrary number codes!

NOTE: The old properties (.keyCode and .which) are Deprecated.

const node = document.getElementsByClassName("input1")[0];
node.addEventListener("keyup", function(event) {
    if (event.key === "Enter") {
        // Do work
    }
});

Modern style, with lambda and destructuring

node.addEventListener("keyup", ({key}) => {
    if (key === "Enter") {
        // Do work
    }
})

If you must use jQuery:

$(document).keyup(function(event) {
    if ($(".input1").is(":focus") && event.key == "Enter") {
        // Do work
    }
});

Mozilla Docs

Supported Browsers

Gibolt
  • 42,564
  • 15
  • 187
  • 127
44
$(document).keyup(function (e) {
    if ($(".input1:focus") && (e.keyCode === 13)) {
       alert('ya!')
    }
 });

Or just bind to the input itself

$('.input1').keyup(function (e) {
    if (e.keyCode === 13) {
       alert('ya!')
    }
  });

To figure out which keyCode you need, use the website http://keycode.info

wesbos
  • 25,839
  • 30
  • 106
  • 143
  • Thank you. I've learned something new. By the way I used .is() ALOT of times so it is not logic, not to be working. Also the ==, again I used two == for other situations – jQuerybeast Aug 15 '11 at 00:54
  • np, you should always be using === – wesbos Aug 15 '11 at 00:55
14

Try this to detect the Enter key pressed in a textbox.

$(function(){

$(".input1").keyup(function (e) {
    if (e.which == 13) {
        // Enter key pressed
    }
 });

});
ShankarSangoli
  • 69,612
  • 13
  • 93
  • 124
9

The best way I found is using keydown ( the keyup doesn't work well for me).

Note: I also disabled the form submit because usually when you like to do some actions when pressing Enter Key the only think you do not like is to submit the form :)

$('input').keydown( function( event ) {
    if ( event.which === 13 ) {
        // Do something
        // Disable sending the related form
        event.preventDefault();
        return false;
    }
});
Roy Shoa
  • 3,117
  • 1
  • 37
  • 41
6

It may be too late to answer this question. But the following code simply prevents the enter key. Just copy and paste should work.

        <script type="text/javascript"> 
        function stopRKey(evt) { 
          var evt = (evt) ? evt : ((event) ? event : null); 
          var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); 
          if ((evt.keyCode == 13) && (node.type=="text"))  {return false;} 
        } 

        document.onkeypress = stopRKey; 

        </script>
Indra Kumar S
  • 2,818
  • 2
  • 16
  • 27
5

The solution that work for me is the following

$("#element").addEventListener("keyup", function(event) {
    if (event.key === "Enter") {
        // do something
    }
});
Jorge Santos Neill
  • 1,635
  • 13
  • 6
3

A solution that worked for me is this:

<input onkeydown="if (event.key == 'Enter'){//do logic}else{}">
Ian
  • 199
  • 3
  • 5
2

Try this to detect the Enter key pressed in a textbox.

$(document).on("keypress", "input", function(e){
    if(e.which == 13){
        alert("Enter key pressed");
    }
});

DEMO

jonathan klevin
  • 193
  • 1
  • 2
0
 $(document).ready(function () {
        $(".input1").keyup(function (e) {
            if (e.keyCode == 13) {
                // Do something
            }
        });
    });
Jobelle
  • 2,717
  • 1
  • 15
  • 26
0

This code handled every input for me in the whole site. It checks for the ENTER KEY inside an INPUT field and doesn't stop on TEXTAREA or other places.

$(document).on("keydown", "input", function(e){
 if(e.which == 13){
  event.preventDefault();
  return false;
 }
});
Umar Niazi
  • 476
  • 5
  • 14
0

Here is what I did for my angular project:

HTML:

<input
    class="form-control"
    [(ngModel)]="searchFirstName"
    (keyup)="keyUpEnter($event)"
/>

TypeScript:

keyUpEnter(event: KeyboardEvent) {
    if (event.key == 'Enter') {
        console.log(event);
    }
}
Omzig
  • 861
  • 1
  • 12
  • 20