Bir metin kutusuna enter tuşuna basarak kullanıcı için JQuery Olay?


250

Jquery'de yalnızca kullanıcı bir metin kutusundaki enter düğmesine basarsa tetiklenen herhangi bir olay var mı? Ya da bunu eklemek için eklenebilecek herhangi bir eklenti? Değilse, bunu yapacak hızlı bir eklentiyi nasıl yazarım?

Yanıtlar:


446

Kendi özel etkinliğinize bağlanabilirsiniz

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

http://jsfiddle.net/x7HVQ/


11
Formun gönderilmesini önlemek için enter algılama senaryosunda, formun tuşla gönderilmeyi algıladığı için "keyup" olayının en uygun olmadığını belirtmek gerekir. Bu nedenle "keydown" veya "keypress" bu durumda daha iyi olabilir.
TechNyquist

7
Not, bind () yöntemi jQuery 3.0'da kullanımdan kaldırılmıştır.
Bart Friederichs

Farklı tarayıcılar e.keyCodebazı tuşlar için farklıdır , kullanımı daha iyidir e.which, bu her tarayıcıda aynı düğmeyi ele alacağınızı garanti eder
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
Teşekkürler - Bu çözüm benim kullanım durumumu taktı. Ancak, herhangi bir işlem yapıldıktan sonra, metin kutusunu yeniden etkinleştirmek için `$ (this) .removeAttr (" devre dışı ");` eklemek isteyebilirsiniz.
misterjaytee

39

İşte sizin için bir eklenti: (Keman: 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')})

Güzel. Gönderdiğim URL'den çok daha basit. Acaba ne yazı heck hakkında ne olduğunu merak ediyorum ve neden bu kadar kod alır ..
CaptSaltyJack

1
Çok geç, çoktan kendimi yazdım: P. Aynı işi daha az satırda da yapar .. Ayrıca, $eklenti için değişkeni kullanmak çatışmalara neden olabileceği için iyi bir fikir değildir.
Click Olumlu oy

@Neal, kabul edilen cevapta gönderdiğim eklentinin kodunun nasıl değiştirilmesi gerektiğini biliyor musunuz, böylece biri yapabilir $("#myInput").bind('click, onEnter', myCallback);ve başka bir şeye ihtiyaç duymadan çalışabilir mi?
Click Olumlu oy

1
@ClickUpvote # 1: Cevabı kaldırın - sonra konuşabiliriz.
Naftali aka Neal

@Neal Amazing çözüm adamı. Bu fonksiyonu kopyaladım! Teşekkürler!
Bilal Fazlani

17

bunu yapmak için bir jquery eklentisi heres

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

kullanmak için kodu ekleyin ve şu şekilde ayarlayın:

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

jsfiddle burada http://jsfiddle.net/VrwgP/30/


2
Güzel, geri aramayı kullanarak func.apply(this), geri çağırma işlevi içinde this, olayın tetiklendiği öğeye erişmek için normal olarak kullanabilirsiniz .
Upvote

evet, func.apply hakkında iyi bir nokta (bu), bunu bile düşünmemişti.
jzilla

Güzel ve özlü, ama herhangi bir form gönderilmesini önlemek için çoğaltma ve varsayılanları durdurmanın çoğu durumda iyi bir fikir olacağını ekliyorum. Sadece bitin e.preventDefault(); e.stopPropagation();içine ekleyin if (e.keyCode).
Irongaze.com

8

Edilmelidir iyi not kullanımı bu live()jQuery edilmiştir kaldırılmış sürümü yana 1.7ve edilmiş kaldırıldı jQuery 1.9. Bunun yerine, kullanılması on()önerilir.

Aşağıdaki potansiyel zorlukları çözdüğü için aşağıdaki bağlama yöntemini şiddetle öneririm:

  1. Etkinliği document.bodyikinci seçici olarak bağlama ve $ seçiciyi ikinci argüman olarak geçirerek on(), yeniden bağlama veya çift bağlama olaylarıyla uğraşmaya gerek kalmadan elemanlar DOM'a eklenebilir, sökülebilir, eklenebilir veya çıkartılabilir. Bunun nedeni, olayın doğrudan document.bodyyerine ekli olmasıdır $selector, yani araçlar $selectoreklenebilir, kaldırılabilir ve tekrar eklenebilir ve hiçbir zaman kendisine bağlı olayı yüklemez.
  2. off()Önceden arayarak on(), bu komut dosyası yanlışlıkla çift bağlayıcı olaylar hakkında endişelenmenize gerek kalmadan sayfanın ana gövdesi içinde veya AJAX çağrısının gövdesi içinde yaşayabilir.
  3. Komut dosyasını içine sararak $(function() {...}), bu komut dosyası sayfanın ana gövdesi tarafından veya bir AJAX çağrısının gövdesi içinde yeniden yüklenebilir. $(document).ready()AJAX istekleri için işten atılmaz $(function() {...}).

İşte bir örnek:

<!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

Girişiniz ise search, on 'search'olayı da kullanabilirsiniz . Misal

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

.

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

3

HTML Kodu:-

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

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

Java Kod Kodu

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;
    }

Formunuzda Varsayılan Gönder Düğmesi yok


2

Başka bir ince varyasyon. Güçlerin hafif bir şekilde ayrılması için gittim, bu yüzden enter tuşunu yakalamayı etkinleştirmek için bir eklentim var, sonra normalde olaylara bağlandım:

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

Ve sonra kullanımda:

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

Bu varyasyon, etkinlik yetkisi kullanmanıza olanak tanır (henüz oluşturmadığınız öğelere bağlamak için).

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

0

keypressJQuery belgelerini okuyana kadar enter düğmesine basma olayını başaramadım ve bir süre başımı çizdim:

" Tuş basma olayı, tarayıcı klavye girişini kaydettiğinde bir öğeye gönderilir. Bu, tuş basma olayına benzer, ancak ÜstKrkt, Esc ve sil tetikleyici tuş basma olaylarını silme, ancak tuş basma olaylarını değil. " ( https://api.jquery.com/keypress/ )

Enter tuşuna basmak için keyupveya keydownolayını kullanmak zorunda kaldım .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.