Ctrl + TEXTAREA'da jQuery girin


92

İmleç TEXTAREA içindeyken ve Ctrl+ Entertuşuna basıldığında bir şeyi nasıl tetiklerim ? JQuery kullanarak . Teşekkürler


kabul ettiğiniz cevap işe yaramıyor. Lütfen kabul ettiğiniz cevabı değiştirin
peterchaula

Yanıtlar:


128

event.ctrlKeyBayrağı Ctrltuşa basılıp basılmadığını görmek için kullanabilirsiniz, bunun gibi bir şey:

$('#textareaId').keydown(function (e) {

  if (e.ctrlKey && e.keyCode == 13) {
    // Ctrl-Enter pressed
  }
});

Yukarıdaki parçacığı buradan kontrol edin .


15
Bu, Google Chrome'da çalışmaz. Ctrl + Enter tuşlarına basıldığında, anahtar kodu 10değil 13.
Znarkus

39
Bu çalışmıyor. Yarolslav Yakovlev'in aşağıdaki çözümü düzgün çalışıyor. İnsanlara zaman kazandırmak için lütfen kabul edilen yanıtı değiştirin.
Phil Ricketts

1
@Replete Hangi ortamı test ettiniz? KeyCode 10 hakkında herhangi bir belge var mı?
Sanghyun Lee

keyCode 10 artık Chrome'da olmamalı, bugs.chromium.org/p/chromium/issues/detail?id=79407
swissspidy

tetikleme keypressolayı olduğunda , keydownkeyup
anahtar kodu

137

Aslında bu, hile yapıyor ve tüm tarayıcılarda çalışıyor:

if ((event.keyCode == 10 || event.keyCode == 13) && event.ctrlKey)

js fiddle'a bağlantı .

Notlar:

  • Windows ve Linux'taki Chrome'da, 13 değil 10 enterolarak kaydedilir keyCode( hata raporu ). Yani ikisini de kontrol etmeliyiz.
  • ctrlKeyolan controlWindows, Linux ve MacOS (değil üzerinde command). Ayrıca bakınız metaKey.

Keman Firefox 27'de çalışmıyor, sorun ne?
CodeManX

4
@Yaroslav: Cevabınızda "event.keyCode == 10" un ne işe yaradığını söyleyebilir misiniz?
Shashank.gupta40

3
Hala keyCode 10 ve diğer krom şeylerini merak eden biri varsa bunu okuyun .
user2422869

1
@YaroslavYakovlev, ctrlKeyMac'lerdeki Komut tuşuna karşılık geliyor mu?
Jacob Stamm

2
Mac'i de desteklemek için:if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey))
Ilya Manyahin

81

Evrensel çözüm

Sıra bu destekler MacOS: Her iki Ctrl+ Enterve ⌘ Command+ Enterkabul edilecektir.

if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
    // do something
}

15
Bu cevabı görmezden gelmeyin çünkü daha düşük bir puan aldı, sadece daha yeni bir cevap, aslında daha iyi.
David Bell

1
İlk bölümün açıklaması: macOS'ta e.ctrlKeyalgılar ⌃ Controlve e.metaKeyalgılar ⌘ Command. Davranışı tetiklemek için hem Ctrl-Enter hem de Command-Enter istiyorsanız bunu kullanın.
Rory O'Kane

Eğer bir kabul niçin açıklayabilir e.keyCodearasında 10ek olarak girin demek 13? MDN keyCodebelgeleri yalnızca listeleri 13girin için olası bir değer olarak, birden fazla tarayıcı ve işletim sistemleri arasında test etti.
Rory O'Kane

1
@ RoryO'Kane Chrome'un Windows ve Linux üzerindeki bazı sürümleri, görünüşe göre 10 değerini kullanıyor.
Flimm

4

Başkalarının yanıtlarını eksik veya tarayıcılar arası uyumlu bulmuyorum.

Bu kod, google chrome'da çalışır.

$(function ()
{
    $(document).on("keydown", "#textareaId", function(e)
    {
        if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey)
        {
            alert('ctrl+enter');
        }
    });
});

2
Daha fazla açıklama ekleyerek cevabınızı geliştirmeyi düşünür müsünüz? Teşekkürler :) Aksi takdirde, bu düşük kaliteli bir soruya düşük kaliteli bir cevap olacaktır.
Theolodis

@Valamas: Cevabınızda "event.keyCode == 10" un ne işe yaradığını söyleyebilir misiniz?
Shashank.gupta40

1
Kopya ve paster cevaplarını seviyorum
Dr.Max Völkel

2

Bu, aşağıdaki gibi basit ama esnek bir JQuery eklentisine genişletilebilir:

$.fn.enterKey = function (fnc, mod) {
    return this.each(function () {
        $(this).keypress(function (ev) {
            var keycode = (ev.keyCode ? ev.keyCode : ev.which);
            if ((keycode == '13' || keycode == '10') && (!mod || ev[mod + 'Key'])) {
                fnc.call(this, ev);
            }
        })
    })
}

Böylece

$('textarea').enterKey(function() {$(this).closest('form').submit(); }, 'ctrl')

Kullanıcı o formun metin alanına odaklanarak ctrl-enter tuşlarına bastığında bir form göndermelidir.

( Https://stackoverflow.com/a/9964945/1017546 sayesinde )


0
$('my_text_area').focus(function{ set_focus_flag });

//ctrl on key down set flag

//enter on key down = check focus flag, check ctrl flag

0

önce Ctrlbasıldığında bir bayrak ayarlamanız gerekir , daha sonra enter tuşunu kontrol etmelisiniz. için bir keyup gördüğünüzde bayrağı kaldırın Ctrl.


0

Belki oyuna biraz geç kaldım ama kullandığım şey şu. Ayrıca, imlecin mevcut hedefi olan formun gönderilmesini de zorlayacaktır.

$(document.body).keypress(function (e) {
    var $el = $(e.target);
    if (e.ctrlKey && e.keyCode == 10) {
        $el.parents('form').submit();
    } else if (e.ctrlKey && e.keyCode == 13) {
        $el.parents('form').submit();
    }
});

Tek bir " ifelse if" yi basitleştirebilirsiniz if (e.ctrlKey && (e.keyCode == 10 || e.keyCode == 13)).
Rory O'Kane
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.