2012-06-12 21 views
31

Próbuję uzyskać klawisz Enter, aby uruchomić funkcję, gdy zostanie naciśnięty, gdy znajduje się w określonym polu tekstowym, i nie uruchamia pierwszego lub domyślny przycisk.Jak uzyskać klawisz Enter w polu tekstowym, aby uruchomić funkcję, a nie przycisk pierwszy/domyślny

można zobaczyć przykład tego, co się tu dzieje: http://jsfiddle.net/cutsomeat/WZ6TM/1/

Po naciśnięciu innych klawiszy dostaniesz okno alertu z kodu dostępu, ale po naciśnięciu klawisza, który nie dostanie powiadomienie pole Enter kod, ale raczej pole alertu w zdarzeniu kliknięcia przycisku.

Oczywiście klawisz Enter uruchamia przycisk. Czy istnieje sposób, aby tego uniknąć i zamiast tego, uchwycić klawisz Enter w zdarzenie keyup, a następnie uruchomić inną funkcję?

Odpowiedz

66

Spróbuj tego:

$('#myText').live("keypress", function(e) { 
     if (e.keyCode == 13) { 
      alert("Enter pressed"); 
      return false; // prevent the button click from happening 
     } 
}); 

Demo

+38

'.live()' jest teraz zdeprecjonowane. Zamiast tego użyj '.on()'. –

+2

lepiej używać 'bind()' zamiast 'on()' lub najgorszego 'live()' – giammin

+0

Użyj 'on()'. 'bind()' jest teraz amortyzowany. – Gavin

10
$(document).ready(function() { 

    $('#myText').keypress(function(e) { 
     if (e.keyCode == 13) { // detect the enter key 
      $('#myButton').click(); // fire a sample click, you can do anything 
     } 
    }); 

    $('#myButton').click(function(e) { 
     alert('Button click activated!'); 
    }); 

}); 

DEMO

Dla elementów żywych używać .on() jak poniżej:

$(document).ready(function() { 

    $(document).on('keypress', '#myText', function(e) { 

     if (e.keyCode == 13) { // detect the enter key 
      $('#myButton').click(); // fire a sample click, you can do anything 
     } 
    }); 

    $(document).on('click', '#myButton', function(e) { 
     alert('Button click activated!'); 
    }); 

}); 
+0

Chciałbym dać +1, ale naprawdę powinieneś wyjaśnić, dlaczego keyup jest lepszy niż keydown/keypress – Schollii

16

Czy e.preventDefault() w keyDown uniknąć domyślne działanie przycisku:

$('#myText').keydown(function(e) { 
    if (e.keyCode == 13) { 
     e.preventDefault(); 
    } 
    alert(e.keyCode); 
}); 
+2

Po prostu zmień jeśli (e.keyCode = 13) na if (e.keyCode == 13) –

47

Zastosowanie .on() jak .live() został deprecated.

$(document).on("keypress", ".myText", function(e) { 
    if (e.which == 13) { 
     //do some stuff 
    } 
}); 
Powiązane problemy