2012-04-22 44 views
9

Birçok ilgili soruları (burada ve başka yerlerde) buldum, ancak bunu özellikle bulamadık.Javascript: Keydown Olayı: Daha fazla ok tuşunu önleyen "Yukarı" ok tuşu Keydown olayları? (yanıtladı: klavye gölgeleme)

Ok tuşlarının (37-40) tuş olaylarını dinlemeye çalışıyorum, ancak ok tuşlarını belirli bir sırada kullanırken, sonraki ok "keydown" olaylarını oluşturmaz.

Örnek: - Kutunun o sayfasında http://blog.pothoven.net/2008/05/keydown-vs-keypress-in-javascript.html

  1. , "> burada yazın" tıklayın.
  2. basılı tutun sağ ok tuşu: Sağ ve yukarı ok tuşlarını tutmaya devam ederken 38
  3. için tablo güncellemeleri,: sağ ok tuşu basın tutup ok tuşu yukarı tutmaya devam ederken tablo güncellemeleri 39
  4. Kodu seçeneğinin basın ve sol ok tuşuna basılı tutun: Ben de aynı şeyi yapmak ama aşağı ok tuşuna yerine beklendiği gibi çalıştığını daha sonra yukarı yön tuşu kullanılıyorsa tablo ancak değil güncelleştirme

yapar.

Ayrıca, tuş takımını ok tuşları yerine kullanırsam, beklendiği gibi çalışır.

Anahtar olay olayının normal çalışmasını engelliyor (her ikisi de olay dinleyicisinde yanlış döndürerek ve preventDefault() öğesini arayarak), ancak davranış devam ediyor.

Klavyem olabileceğini düşündüm, ancak bir dizüstü bilgisayarın yanı sıra bir arkadaş makinesinde de oluyor.

Neler olup bittiği hakkında herhangi bir bilgisi yok mu? Ya da geçici çözümler hakkında bazı iyi fikirler?

[değiştir] İşte demek istediğim bir örnek. Bu tüm tarayıcılarda çalışmayabilir farkındayım ama sadece benim için ne olup bittiğini göstermek (w7 üzerine krom ve ayrıca mac os 10.6.8 üzerinde & safari krom)

<html> 
<body> 
<script> 

var keysDown = {}; 
addEventListener("keydown", function(e) { 
    keysDown[e.keyCode] = true; 
    document.getElementById('latestKeydown').value=e.keyCode; 
}, false); 

addEventListener("keyup",function(e){ 
    delete keysDown[e.keyCode]; 
}, false); 

var loop = function(){ 
    document.getElementById('upinput').value=keysDown[38]; 
    document.getElementById('downinput').value=keysDown[40]; 
    document.getElementById('leftinput').value=keysDown[37]; 
    document.getElementById('rightinput').value=keysDown[39]; 
} 

setInterval(loop,1); 

</script> 
Up: <input id="upinput" type=text size=10><br /> 
Down: <input id="downinput" type=text size=10><br /> 
Left: <input id="leftinput" type=text size=10><br /> 
Right: <input id="rightinput" type=text size=10><br /> 
Recent Keydown: <input id="latestKeydown" type=text size=10><br /> 

</body> 
</html> 

benim laptop üzerinde birlikte bu attı Yine, sorun: Eğer A, sonra S, sonra D, sonra F, sonra G tuşlarına basarsam, yeni bir tuş tutmaya başladığım her defasında "Son Keydown" güncellemesini görebilirsiniz.

Ancak, sağ ok aşağı, sonra yukarı ok, sonra sol ok, sol ok tuşu için "Son Keydown" güncelleştirmesini görmüyorum.

+1

Bazı kod satırlarını bekliyorum. –

+0

Taşma Yığına Hoş Geldiniz! –

+0

* "... klavyenin bağlı olduğu yoldan bunu anlayamayabilir." OO –

cevap

3

Bu konuda yetkili konuşamam ama https://stackoverflow.com/a/4177260/562209'a göre, bir değiştirici anahtar (lar) ve değiştirici olmayan bir tuşa aynı anda basmadığınız sürece, birden çok tuşa basmakla ilgili olarak "bilgisayar çalışmıyor olabilir" Klavyelerin kablolu olması nedeniyle bunu anlayın ".

+3

İşte bu sorunun iyi bir açıklaması: http://www.microsoft.com/appliedsciences/antighostingexplained.mspx – user123444555621

+0

Gah :(Teşekkürler, millet, bu muhtemelen suçlu gibi görünüyor. – ElleryTheJones

İlgili konular