16

JavaScript (JQuery)

$('input').keyup(function(e)
{
    var code = e.keyCode ? e.keyCode : e.which;

    switch(code)
    {
        case 38:
        break;

        case 40:
        break;

        case 13:
        break;

        default:
        return;
     }
 });

HTML

<form method="post" action="/">
<input type="text" name="text" />
<button type="submit">Submit</button>
</form>

私には2つの問題があります:

1)上矢印キーを押してもキャレットが動かない。

たとえば、Chrome でアップ キーを押すと、キャレットが左に移動します。しかし、私はChromeでのみこの問題を抱えています。FFでは問題なく動作します。

2) Enterキーを押したときに、フォームを送信したくありません。

ところで、私はこれをkeyup ではなくkeypressで動作させたいと思っています。

アイデアをいただければ幸いです。ありがとう。

4

5 に答える 5

51

preventDefault()イベントで(ブラウザがキーのデフォルトアクションを実行するのを停止するために使用する必要がある)できないと思いますkeyup-デフォルトイベントがすでに発生した後に発生します。詳細については、このページを参照してください。

可能であれば、keydown代わりに を使用することを検討してください。

フォームの送信を停止するには、submitイベントにバインドしreturn false;、送信ボタンによって送信がトリガーされなかった場合にバインドできます (これを確認する方法については、jQuery: フォーム送信時にクリックされたボタンを取得する方法を参照してください)。

一方、keypressフォームにバインドし、Enterが押されたときに、同じ方法で送信をキャンセルすることもできます (テストされていないコード):

$('form').keypress(function(e){
    if(e.which === 13){
        return false;
    }
});
于 2011-06-02T21:02:35.407 に答える
0

ブレークの代わりに、falseを返すか、関数を呼び出してhttp://api.jquery.com/event.preventDefault/を使用することができます。

例えば:case 40: function(e) {e.preventDefault;}

また、$('form').submit(function() {return false});提出を完全に停止しますが、それがあなたが求めているものかどうかはわかりませんか?

于 2011-06-02T21:03:48.700 に答える
0

ユーザーがEnterキーを押したときにフォームが送信されないようにするには、フォームの送信機能をバインドし、イベントトリガーがEnterボタンが押された場合はfalseを返す必要があります。

上/下ボタンを押すには、e.preventDefault();

于 2011-06-02T21:03:49.480 に答える
0

最も信頼できる方法は、 と のe.preventDefault()組み合わせe.stopPropagation()ですreturn false

これは次のようになります。

var override_keys = [13, 38, 40];

$('input').keyup(function(e){
  var code = e.keyCode ? e.keyCode : e.which;

  if ($.inArray(code, override_keys)) {
    e.preventDefault();
    e.stopPropagation();
    return false;
  }
});

また、Enter キーでフォームが送信されないようにするには、フォームのsubmitイベントを確認する必要があります。

$('#form').submit(function(e){
  var code = e.keyCode ? e.keyCode : e.which;

  if ($.inArray(code, override_keys)) {
    return false;
  }
});
于 2011-06-02T21:17:48.770 に答える
0

keyup(); の使用中に「ENTER」のデフォルトを実際に停止できるようです。... jQuery api は、それ自体についてここに書いています: http://api.jquery.com/keyup/

これがあなたがしなければならない方法です:

$('textarea').keyup(function(e) {
   // your code here
}).keydown(function(e){
   // your e.which for ENTER.
});
于 2012-08-28T14:21:31.740 に答える