テキストボックスでEnterキーを押すユーザーのjQueryイベント?


250

ユーザーがテキストボックスのEnterボタンを押した場合にのみトリガーされるJqueryのイベントはありますか?またはこれを含めるために追加できるプラグインはありますか?そうでない場合、どうすればこれを行うクイックプラグインを作成できますか?

回答:


446

独自のカスタムイベントを接続できます

$('textarea').bind("enterKey",function(e){
   //do stuff here
});
$('textarea').keyup(function(e){
    if(e.keyCode == 13)
    {
        $(this).trigger("enterKey");
    }
});

http://jsfiddle.net/x7HVQ/


11
フォームの送信を防ぐための入力検出のシナリオでは、フォームがキーダウン時に送信を検出するため、「keyup」イベントは最適ではないことに注意してください。したがって、「keydown」または「keypress」がその場合にはより良いかもしれません。
TechNyquist 2017

7
bind()はjQuery 3.0では非推奨であることに注意してください。
バートFriederichsの

e.keyCode一部のキーはブラウザによって異なりますが、使用する方が良いですe.which。これにより、すべてのブラウザで同じボタンを処理できることが保証されます
Oleg Shakhov

99
   $('#textbox').on('keypress', function (e) {
         if(e.which === 13){

            //Disable textbox to prevent multiple submit
            $(this).attr("disabled", "disabled");

            //Do Stuff, submit, etc..

            //Enable the textbox again if needed.
            $(this).removeAttr("disabled");
         }
   });

8
ありがとう-このソリューションは私のユースケースに適合しました。ただし、処理が完了したら、 `$(this).removeAttr(" disabled ");`を追加してテキストボックスを再度有効にすることもできます。
ミスタージェイティー2016

39

ここにあなたのためのプラグインがあります:(フィドル:http : //jsfiddle.net/maniator/CjrJ7/

$.fn.pressEnter = function(fn) {  

    return this.each(function() {  
        $(this).bind('enterPress', fn);
        $(this).keyup(function(e){
            if(e.keyCode == 13)
            {
              $(this).trigger("enterPress");
            }
        })
    });  
 }; 

//use it:
$('textarea').pressEnter(function(){alert('here')})

いいね。私が投稿したそのURLよりもはるかに単純です。私は..私は投稿記事は、すべての理由&について、それはとても多くのコードを取るされて一体何だろう
CaptSaltyJack

1
遅すぎて、私はすでに自分で:Pを書いています。また、同じ行を少ない行で実行します。また、$プラグインに変数を使用することは、競合を引き起こす可能性があるため、お勧めできません。
Upvote

@ニール、私が受け入れた回答に投稿したプラグインのコードをどのように変更する必要があるか知っていますか$("#myInput").bind('click, onEnter', myCallback);
29:11にUpvoteをクリックする」

1
@ClickUpvote#1:答えからそれを削除します-その後、話し合います。
Naftali別名Neal

@ニール素晴らしいソリューションマン。私はその機能をコピーしました!ありがとう!
Bilal Fazlani 2013年

17

それを行うためのjqueryプラグイン

(function($) {
    $.fn.onEnter = function(func) {
        this.bind('keypress', function(e) {
            if (e.keyCode == 13) func.apply(this, [e]);    
        });               
        return this; 
     };
})(jQuery);

それを使用するには、コードを含めて、次のように設定します。

$( function () {
    console.log($("input"));
    $("input").onEnter( function() {
        $(this).val("Enter key pressed");                
    });
});

ここのjsfiddle http://jsfiddle.net/VrwgP/30/


2
いいですねfunc.apply(this)、コールバック関数を使用thisしてコールバックを呼び出します。そのようにして、コールバック関数内で、通常どおりイベントをトリガーした要素にアクセスできます。
投票する

ええ、func.apply(this)の良い点は、それさえ考慮していませんでした。
jzilla

素晴らしく簡潔ですが、フォームの送信を防ぐには、ほとんどの場合、伝達とデフォルトを停止することをお勧めします。ビットのe.preventDefault(); e.stopPropagation();中に追加するif (e.keyCode)だけです。
Irongaze.com 2014

8

しなければならないだけでなく注意を使用することをlive()jQueryのでは、されている非推奨バージョン以降1.7とされています削除 jQueryの中で1.9。代わりに、の使用をon()お勧めします。

次のバインドの方法論は、次の潜在的な課題を解決するため、強くお勧めします。

  1. イベントをバインドdocument.bodyし、2番目の引数として$ selectorをに渡すことによりon()、再バインドまたは二重バインドイベントを処理する必要なく、DOMに対して要素をアタッチ、デタッチ、追加、または削除できます。これは、イベントが直接でdocument.bodyはなくアタッチされているためです。$selectorつまり$selector、追加、削除、および追加ができ、バインドされたイベントをロードすることはありません。
  2. off()beforeを呼び出すことによりon()、このスクリプトはページの本体内またはAJAX呼び出しの本体内のいずれかに存在することができ、誤ってイベントを二重にバインドすることを心配する必要はありません。
  3. $(function() {...})でスクリプトをラップすることにより、このスクリプトはページの本体またはAJAX呼び出しの本体のいずれかによって再びロードできます。$(document).ready()AJAXリクエストに対しては発生しませんが、発生$(function() {...})します。

次に例を示します。

<!DOCTYPE html>
  <head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript">
      $(function() {
        var $selector = $('textarea');

        // Prevent double-binding
        // (only a potential issue if script is loaded through AJAX)
        $(document.body).off('keyup', $selector);

        // Bind to keyup events on the $selector.
        $(document.body).on('keyup', $selector, function(event) {
          if(event.keyCode == 13) { // 13 = Enter Key
            alert('enter key pressed.');
          }
        });
      });
    </script>
  </head>
  <body>

  </body>
</html>

4

入力がの場合、イベントsearchも使用できますon 'search'。例

<input type="search" placeholder="Search" id="searchTextBox">

$("#searchPostTextBox").on('search', function () {
    alert("search value: "+$(this).val());
});

3

HTMLコード:-

<input type="text" name="txt1" id="txt1" onkeypress="return AddKeyPress(event);" />      

<input type="button" id="btnclick">

Javaスクリプトコード

function AddKeyPress(e) { 
        // look for window.event in case event isn't passed in
        e = e || window.event;
        if (e.keyCode == 13) {
            document.getElementById('btnEmail').click();
            return false;
        }
        return true;
    }

フォームにデフォルトの送信ボタンがありません


2

別の微妙なバリエーション。私は少し力の分離に行ったので、Enterキーをキャッチできるようにするプラグインがあります。それから、通常どおりイベントにバインドします。

(function($) { $.fn.catchEnter = function(sel) {  
    return this.each(function() { 
        $(this).on('keyup',sel,function(e){
            if(e.keyCode == 13)
              $(this).trigger("enterkey");
        })
    });  
};
})(jQuery);

そして使用中:

$('.input[type="text"]').catchEnter().on('enterkey',function(ev) { });

このバリエーションでは、イベントの委任を使用できます(まだ作成していない要素にバインドするため)。

$('body').catchEnter('.onelineInput').on('enterkey',function(ev) { /*process input */ });

0

keypressjQueryのドキュメントを読むまで、Enterボタンのイベントを発生させることができず、しばらく頭をかきました。

" keypressイベントは、ブラウザがキーボード入力を登録するときに要素に送信されます。これは、修飾キーとShift、Escなどの非印刷キー、および削除トリガーkeydownイベントではなくkeypressイベントではないことを除いて、keydownイベントと同様です。 "(https://api.jquery.com/keypress/

Enterボタンの押下をキャッチするには、keyupまたはkeydownイベントを使用する必要がありました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.