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 .
keydownBunun 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 keyupve sayfanızın keypressetkinliği görmeyecek olmasıdır .
keydown keypress keyup. unixpapa.com/js/testkey.html
keyupolay tetikleninceye kadar karakterin alanda görünmediği görülmektedir .
keydownolayı tetikler, ancak karakter bundan sonraya kadar girişten kaldırılmaz.
keypressOlay 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 keypressetkinlik tetiklenir veya tetiklenmez - geri tuşu keydown/keypress/keyupFirefox'ta tetiklenir ancak yalnızca keydown/keyupChrome'da tetiklenir .
Chrome'da
keydown/keypress/keyuptarayıcı bir klavye girişini kaydettiğinde ( keypresstetiklenir)
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/keyuptarayıcı bir klavye girişi kaydettiğinde, aynı zamanda geri tuşu, ok tuşları, sekme için de ( keypressgiriş 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 keyupveya 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ü.
keypressbirçok tarayıcıda olayları tetikler. Bkz. Unixpapa.com/js/key.html