JQuery ile tıklama olayı sırasında bir tuşa basılıp basılmadığını nasıl kontrol edebilirim?


105

JQuery ile bir tıklama olayını yakalamak ve aynı anda bir tuşa basılıp basılmadığını söyleyebilmek istiyorum, böylece tuşa basma olayına bağlı olarak geri arama işlevi içinde çatallanabilirim.

Örneğin:

$("button").click(function() {
    if([KEYPRESSED WHILE CLICKED]) {
        // Do something...
    } else {
        // Do something different...
    }
});

Bu mümkün mü yoksa mümkünse nasıl yapılabilir?

Yanıtlar:


174

Olay özelliklerinden shift, alt ve kontrol tuşlarını kolayca tespit edebilirsiniz;

$("button").click(function(evt) {
  if (evt.ctrlKey)
    alert('Ctrl down');
  if (evt.altKey)
    alert('Alt down');
  // ...
});

Daha fazla özellik için quirksmode'a bakın . Diğer anahtarları tespit etmek istiyorsanız, cletus'un cevabına bakın .


3
Bu özelliği jQuery Event nesnesinde göremiyorum
cletus

1
Sayfanın dediği gibi, "Orijinal olaydaki çoğu özellik kopyalanır ve yeni olay nesnesine normalleştirilir." ctrlKey, altKey vb. ecmascript standardının bir parçasıdır (yukarıda bahsedilen jquery api sayfasındaki ilk bağlantıya bakın), bu nedenle (en azından düzgün tarayıcılarda) olay nesnesi genellikle bu özelliklere de sahiptir.
kkyy

3
Olağandışı modu yalnızca bu tanımlanır diyor içinde .. kilit olay, bir fare olay hakkında hiçbir söz.

6
Mac OS X'in komut tuşunu kullanarak bile algılayabilirsiniz if (e.metaKey) alert('Command down'). JS unixpapa.com/js/key.html
F Lekschas

48

keydown()Ve kullanarak anahtar durumunu ayrı ayrı izlemeniz gerekir keyup():

var ctrlPressed = false;
$(window).keydown(function(evt) {
  if (evt.which == 17) { // ctrl
    ctrlPressed = true;
  }
}).keyup(function(evt) {
  if (evt.which == 17) { // ctrl
    ctrlPressed = false;
  }
});

Anahtar kodları listesine bakın . Şimdi şunları kontrol edebilirsiniz:

$("button").click(function() {
  if (ctrlPressed) {
    // do something
  } else {
    // do something else
  }
});

6
Bu yöntemin bir dezavantajı (daha iyi bir yol bildiğimden değil), ALT tuşunu ve kullanıcı ALT-Sekmelerini başka bir pencereye algılarsanız, keyup olayı tarayıcı tarafından algılanmaz çünkü başka bir uygulamada meydana gelir. . Bu noktadan sonra jquery, jquery uygulamanızda anahtarlanana kadar anahtarın kapalı olduğunu düşünür. Bu sadece hayal edebileceğim kadarıyla ALT tuşuyla önemli.
Düz Kedi

1
Mac OS X için bu Cmd-Tab olurdu, ancak bence müdür hala geçerli
murftown

1
Veya tarayıcının sekmesini değiştirmek için Ctrl + Tab
Seeven

9

Sadece JavaScript ile kullanabildim

 <a  href="" onclick="return Show(event)"></a>

  function Show(event) {
            if (event.ctrlKey) { 
                 alert('Ctrl down');
            }
     }

1
Dahası, küçük bir ayarlama ve bir kalem yaptım
vr_driver

3

Çalmadan @Arun Prasad gök , burada saf bir JS ben CTL + tıklama basıldığında aksi yeni bir pencere açacak varsayılan eylemi durdurmak rehashed pasajı olduğunu.

function Show(event) 
{
  if (event.ctrlKey) 
  {
    alert('Ctrl held down which clicked');
  } 
  else 
  {
    alert('Ctrl NOT pressed');
  }
  return false
}
<p>Hold down CTL on the link to get a different message</p>

<a href="" onclick="return Show(event)">click me</a>

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.