Yanıtlar:
KeyPress olayı sadece karakter için çağrılır (yazdırılabilir) tuşları, KeyDown olayı bütün gibi yazdırılamaz dahil olmak üzere yükseltilir Control, Shift, Alt,BackSpace , vb
GÜNCELLEME:
Bir tuşa basıldığında tuşa basma olayı tetiklenir ve bu tuş normalde bir karakter değeri üretir
Referans .
keydown
Bunun yerine deneyin keypress
.
Klavye olayları şu sırada oluşur: keydown
, keyup
,keypress
Backspace ile ilgili sorun muhtemelen tarayıcının tekrar gezineceği keyup
ve sayfanızın keypress
etkinliği görmeyecek olmasıdır .
keydown
keypress
keyup
. unixpapa.com/js/testkey.html
keyup
olay tetikleninceye kadar karakterin alanda görünmediği görülmektedir .
keydown
olayı tetikler, ancak karakter bundan sonraya kadar girişten kaldırılmaz.
keypress
Olay tarayıcılarda farklı olabilir.
Chrome ve Firefox'ta klavye olaylarını (JQuery kısayollarını kullanarak) karşılaştırmak için bir Jsfiddle oluşturdum . Kullandığınız tarayıcıya bağlı olarak bir keypress
etkinlik tetiklenir veya tetiklenmez - geri tuşu keydown/keypress/keyup
Firefox'ta tetiklenir ancak yalnızca keydown/keyup
Chrome'da tetiklenir .
Chrome'da
keydown/keypress/keyup
tarayıcı bir klavye girişini kaydettiğinde ( keypress
tetiklenir)
keydown/keyup
klavye girişi yoksa (alt, shift, backspace, ok tuşlarıyla test edilmiştir)
keydown
sadece sekme için mi?
Firefox'ta
keydown/keypress/keyup
tarayıcı bir klavye girişi kaydettiğinde, aynı zamanda geri tuşu, ok tuşları, sekme için de ( keypress
giriş yapılmadan bile burada tetiklenir)
keydown/keyup
alt için, shift
Bu şaşırtıcı olmamalı çünkü https://api.jquery.com/keypress/ adresine göre :
Not: keypress olayı herhangi bir resmi spesifikasyon kapsamında olmadığından, bunu kullanırken karşılaşılan gerçek davranış tarayıcılar, tarayıcı sürümleri ve platformlar arasında farklılık gösterebilir.
Tuşa basma olayı türünün kullanımı W3C tarafından kullanımdan kaldırılmıştır ( http://www.w3.org/TR/DOM-Level-3-Events/#event-type-keypress )
Tuşa basma olay türü, bu belirtimde başvuru ve eksiksizlik için tanımlanmıştır, ancak bu belirtim, bu olay türünün kullanımını reddetmektedir. Bağlamları düzenlerken, yazarlar bunun yerine beforeinput olayına abone olabilirler.
Son olarak, sorunuzu cevaplamak için Firefox ve Chrome'da bir geri almayı algılamanız keyup
veya kullanmanız gerekir keydown
.
Burada deneyin:
$(".inputTxt").bind("keypress keyup keydown", function (event) {
var evtType = event.type;
var eWhich = event.which;
var echarCode = event.charCode;
var ekeyCode = event.keyCode;
switch (evtType) {
case 'keypress':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<br>");
break;
case 'keyup':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<p>");
break;
case 'keydown':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<br>");
break;
default:
break;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input class="inputTxt" type="text" />
<div id="log"></div>
Yazdığım bir şey herkesin bir form alanında olduklarını düşünürken geri tepen isabet eden insanlarla ilgili bir sorunla karşılaşırsa
window.addEventListener("keydown", function(e){
/*
* keyCode: 8
* keyIdentifier: "U+0008"
*/
if(e.keyCode === 8 && document.activeElement !== 'text') {
e.preventDefault();
alert('Prevent page from going back');
}
});
Sayısal kontrolüm:
function CheckNumeric(event) {
var _key = (window.Event) ? event.which : event.keyCode;
if (_key > 95 && _key < 106) {
return true;
}
else if (_key > 47 && _key < 58) {
return true;
}
else {
return false;
}
}
<input type="text" onkeydown="return CheckNumerick(event);" />
dene
BackSpace anahtar kodu 8
Daha yeni ve daha temiz: kullanın event.key
. Artık keyfi sayı kodları yok!
note.addEventListener('keydown', function(event) {
const key = event.key; // const {key} = event; ES6+
if (key === "Backspace") {
// Do something
}
});
.key
şu anda dokümanlar tarafından önerilen seçenektir. Ayrıca, herhangi bir tuş için farklı eşlemeler içeren çeşitli uluslararası klavyeleri destekler. Onlar değil keyfi düzeltilinceye anlamında, ama kod okurken bunlar
Bunun yerine keyup / keydown / beforeinput olaylarından birini kullanın.
bu referansa dayanarak , tuşa basma kullanımdan kaldırılmıştır ve artık önerilmemektedir.
Karakter değeri üreten bir tuşa basıldığında keypress olayı tetiklenir. Karakter değeri üreten tuşlara örnek olarak alfabetik, sayısal ve noktalama işaretleri verilebilir. Karakter değeri üretmeyen anahtarlara örnek olarak Alt, Shift, Ctrl veya Meta gibi değiştirici anahtarlar verilebilir.
"beforeinput" kullanıyorsanız Tarayıcı uyumluluğuna dikkat edin . "beforeinput" ile diğer ikisi arasındaki fark, giriş değeri değişmek üzereyken "beforeinput" komutunun tetiklenmesidir, bu nedenle giriş değerini değiştiremeyen karakterlerde tetiklenmez (örn. shift, ctr, alt).
Aynı problemi yaşadım ve keyup kullanarak çözüldü.
keypress
birçok tarayıcıda olayları tetikler. Bkz. Unixpapa.com/js/key.html