JavaScript'te ctrl + z tuş kombinasyonunu yakalama


86

Bu kodla javascript'te ctrl+ ztuş kombinasyonunu yakalamaya çalışıyorum :

<html>
<head>
    <title>Untitled Document</title>
</head>
<body>

    <script type='text/javascript'>
        function KeyPress(e) {
            var evtobj = window.event? event : e


            //test1 if (evtobj.ctrlKey) alert("Ctrl");
            //test2 if (evtobj.keyCode == 122) alert("z");
            //test 1 & 2
            if (evtobj.keyCode == 122 && evtobj.ctrlKey) alert("Ctrl+z");
        }

        document.onkeypress = KeyPress;
    </script>

</body>
</html>

Yorumlu "test1" satırı, ctrltuşu basılı tutup başka herhangi bir tuşa basarsam uyarı oluşturur .

Yorumlanan satır "test2", ztuşuna basarsam uyarı oluşturur .

Bunları "test 1 & 2" den sonraki satıra göre bir araya getirin ve ctrltuşu basılı tutup ardından tuşuna basmak zbeklendiği gibi uyarıyı oluşturmaz.

Kodun nesi var?

Yanıtlar:


95
  1. Kullan onkeydown(veya onkeyup), değilonkeypress
  2. keyCode122 değil, 90 kullanın

Çevrimiçi demo: http://jsfiddle.net/29sVC/

Açıklamak gerekirse, anahtar kodlar karakter kodlarıyla aynı değildir.

Karakter kodları metin içindir (kodlamaya bağlı olarak farklılık gösterirler, ancak çoğu durumda 0-127 ASCII kodları olarak kalır). Anahtar kodları klavyedeki tuşlarla eşleşir. Örneğin, unicode karakterinde 0x22909, 好 anlamına gelir. Bunun için gerçekten bir anahtarı olan çok sayıda klavye (varsa) yok.

İşletim sistemi, kullanıcının yapılandırdığı giriş yöntemlerini kullanarak tuş vuruşlarını karakter kodlarına dönüştürmeye özen gösterir. Sonuçlar tuşa basma olayına gönderilir. (Oysa tuş basma ve tuş basma, kullanıcının metin yazmadan düğmelere basmasına yanıt verir.)


1
Teşekkürler, işe yarıyor. Neden onkeypress ve keyCode 122 çalışmıyor?
Paul Johnston

Lütfen çözümünüzde uyarı yerine önlemDefault () nasıl yapılır? Ctrl + t için test yapıyorum.
Surendra Jnawali

@SJnawali: Bunun mümkün olduğundan emin değilimctrl+t
zerkms

4
keyCode 122 neden çalışmıyor? iyi 122içindir F11 :) anahtarla
Bebek

7
@PaulJohnston Çünkü anahtar kodu, karakter koduyla aynı şey değildir . Karakter kodları metin içindir (kodlamaya bağlı olarak farklılık gösterirler, ancak çoğu durumda 0-127 ASCII kodları olarak kalır). Anahtar kodları klavyedeki tuşlarla eşleşir. Örneğin, unicode karakterinde 0x22909, 好 anlamına gelir. Bunun için gerçekten bir anahtarı olan çok sayıda klavye (varsa) yoktur. İşletim sistemi, kullanıcının yapılandırdığı giriş yöntemlerini kullanarak tuş vuruşlarını karakter kodlarına dönüştürmeye özen gösterir. Sonuçlar keypressetkinliğe gönderilir . (Oysa keydownve keyupkullanıcıya metin yazmadan düğmelere basarak yanıt verir.)
Aidiakapi

32

Bu soruyla karşılaşan gelecek millet için, işte işi halletmek için daha iyi bir yöntem:

document.addEventListener('keydown', function(event) {
  if (event.ctrlKey && event.key === 'z') {
    alert('Undo!');
  }
});

Kullanımı event.key, kodu büyük ölçüde basitleştirir ve sabit kodlanmış sabitleri kaldırır. IE 9+ desteği vardır.

Ek olarak, kullanmak, document.addEventListenerdiğer dinleyicileri aynı olayla boğmayacağınız anlamına gelir.

Son olarak, kullanmak için bir sebep yok window.event. Aktif olarak önerilmez ve kırılgan koda neden olabilir.


Ayrıca, KeyboardEvent.keyCodebirkaç yıl önce artık kullanımdan kaldırıldığını da ekleyeceğim . Tüm tarayıcıları yakalamanın en iyi yolu, e.keyönce kontrol edip sonra geri dönmektir e.keyCode. Veya bu çoklu dolguyu kullanabilirsiniz
Evet Barry

9

Ctrl+ tda mümkündür ... anahtar kodunu 84 gibi kullanın

if (evtobj.ctrlKey && evtobj.keyCode == 84) 
 alert("Ctrl+t");

6
$(document).keydown(function(e){
  if( e.which === 89 && e.ctrlKey ){
     alert('control + y'); 
  }
  else if( e.which === 90 && e.ctrlKey ){
     alert('control + z'); 
  }          
});

Demo


3

90 Zanahtar ve bu gerekli yakalamayı yapacak ...

function KeyPress(e){
     // Ensure event is not null
     e = e || window.event;

     if ((e.which == 90 || e.keyCode == 90) && e.ctrlKey) {
         // Ctrl + Z
         // Do Something
     }
}

Gereksinimlerinize bağlı olarak e.preventDefault();, özel işlevlerinizi özel olarak gerçekleştirmek için if ifadenizin içine bir eklemek isteyebilirsiniz .


0
document.onkeydown = function (e) {
    var special = e.ctrlKey || e.shiftKey;
    var key = e.charCode || e.keyCode;
  console.log(key.length);
  if (special && key == 38 || special && key == 40 ) { 
    // enter key do nothing
    e.preventDefault();
  }        
}

burada iki tuşu, üst karakter + veya Ctrl + tuş kombinasyonlarını engellemenin bir yolu var.

&&, kombinasyonlar olmadan tuş kombinasyonlarına yardımcı olur, tüm ctrl veya shift tuşlarını engeller.


-3

Benim tarafımdan yapılan bu Eklenti yardımcı olabilir.

Eklenti

Bu eklentiyi kullanabilirsiniz, anahtar Kodları ve bu şekilde çalıştırılacak işlevi sağlamanız gerekir

simulatorControl([17,90], function(){console.log('You have pressed Ctrl+Z');});

Kodda Ctrl+ için nasıl çalışılacağını görüntüledim Z. Bağlantıda Ayrıntılı Belgeler alacaksınız. Eklenti, Codepen'de Kalemimin JavaScript Kodu bölümündedir.


-5

CTRL+ İçin bu kodu kullanın Z. Ztuşa basma için tuş kodu 122 ve CTRL+ Z26'dır. konsol alanınızda bu anahtar kodunu kontrol edin

 $(document).on("keypress", function(e) {
       console.log(e.keyCode);
       /*ctrl+z*/
       if(e.keyCode==26)
       {
          //your code here
       }
    });
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.