Ben şahsen çok anahtarlı yaklaşımı tercih ederim. Bu, birden çok tuşun algılanmasına izin verir, aynı zamanda tek bir tuşa da aynıdır ve test ettiğim her tarayıcıda çalışır.
map={}//declare object to hold data
onkeydown=onkeyup=function(e){
e=e||event//if e doesn't exist (like in IE), replace it with window.event
map[e.keyCode]=e.type=='keydown'?true:false
//Check for keycodes
}
alternatif bir yöntem, her olay haritası subitems onkeydown
ve onkeyup
olayları ayırmak ve açıkça tanımlamak olacaktır:
map={}
onkeydown=function(e){
e=e||event
map[e.keyCode]=true
}
onkeyup=function(e){
e=e||event
map[e.keyCode]=false
}
Her iki şekilde çalışıyor. Şimdi, aslında tuş vuruşlarını tespit etmek için, hata düzeltmelerini içeren yöntem vardır:
//[in onkeydown or onkeyup function, after map[e.keyCode] has been decided...]
if(map[keycode]){
//do something
map={}
return false
}
map[keycode]
CTRL
için Enter
için 13
veya 17
gibi belirli bir anahtar kodu, oluşturmaktadır.
map={}
hat return false
önler, örneğin, haşhaş Bookmarks'tan iletişim kutusu CTRL+D
için kontrol ederken ederken, unfocusing durumlarda tuşların üzerine "tutma" dan tutmak için harita nesnesi temizler. Bazı durumlarda, onu e.preventDefault()
ile değiştirmek isteyebilirsiniz, ancak çoğu durumda daha verimli olması için return false
buldum. Sadece net bir bakış açısı elde etmek için CTRL+D
ile deneyin. Ctrl
, 17
ve D
, 68
'dur. return false
satırı olmadan, Yer İmleri iletişim kutusunun görüntüleneceğine dikkat edin.
bazı örnekler izleyin: akılda tutulması gereken
if(map[17]&&map[13]){//CTRL+ENTER
alert('CTRL+ENTER was pressed')
map={}
return false
}else if(map[13]){//ENTER
alert('Enter was pressed')
map={}
return false
}
Bir şey daha küçük kombinasyonları son gelmelidir olmasıdır. Her zaman if.else zincirinde her zaman daha büyük kombinasyonlar koyun, böylece Enter
ve CTRL+ENTER
için aynı anda bir uyarı alamazsınız.
Şimdi, "hepsini bir araya getir" için tam bir örnek. Kullanıcı SHIFT+?
tuşlarına bastığında giriş yapmak ve kullanıcı ENTER
tuşlarına bastığında giriş yapmak için talimatları içeren bir mesajı uyarmak istediğinizi varsayalım. Bu örnek de, bu IE'de çalışır anlamına da çapraz tarayıcı uyumludur: bazı özel tuşlar farklı motorları için farklı kodlara sahip
map={}
keydown=function(e){
e=e||event
map[e.keyCode]=true
if(map[16]&&map[191]){//SHIFT+?
alert('1) Type your username and password\n\n2) Hit Enter to log in')
map={}
return false
}else if(map[13]){//Enter
alert('Logging in...')
map={}
return false
}
}
keyup=function(e){
e=e||event
map[e.keyCode]=false
}
onkeydown=keydown
onkeyup=keyup//For Regular browsers
try{//for IE
document.attachEvent('onkeydown',keydown)
document.attachEvent('onkeyup',keyup)
}catch(e){
//do nothing
}
Not. Ancak test ettiğim gibi, şu anda bilgisayarımda bulunan Maxthon 3, Google Chrome, Internet Explorer (9 ve 8) ve Firefox da dahil olmak üzere her tarayıcıda çalışıyor.
Umarım bu yardımcı olmuştur.
Benim kodunda bu yolda çalıştı
İlginç, "onkeyup" olayı bile 8. –