Answers:
KeyPress事件被用于字符仅调用(打印)的键,KeyDown事件引发的所有包括不可打印如Control,Shift,Alt,BackSpace,等。
更新:
当按下某个键时会触发keypress事件,并且该键通常会产生一个字符值
参考。
尝试keydown
代替keypress
。
键盘事件发生顺序如下:keydown
,keyup
,keypress
退格的问题可能是浏览器将重新导航keyup
,因此您的页面将看不到该keypress
事件。
keyup
触发该事件。
keydown
事件,但直到此后的某个时间才将其从输入中删除。
keypress
跨浏览器的事件可能有所不同。
我创建了一个Jsfiddle来比较Chrome和Firefox上的键盘事件(使用JQuery快捷方式)。根据使用的浏览器,是否keypress
会触发事件-退格键将keydown/keypress/keyup
在Firefox keydown/keyup
上触发,但仅在Chrome上触发。
在Chrome上
keydown/keypress/keyup
当浏览器注册键盘输入时(keypress
触发)
keydown/keyup
如果没有键盘输入(使用alt,shift,退格键,箭头键进行测试)
keydown
仅用于标签?
在Firefox上
keydown/keypress/keyup
当浏览器注册键盘输入以及退格键,箭头键,制表符时(因此keypress
即使没有输入也被触发)
keydown/keyup
对于alt,移位
这并不奇怪,因为根据https://api.jquery.com/keypress/:
注意:由于keypress事件未包含在任何正式规范中,因此使用它时遇到的实际行为可能会因浏览器,浏览器版本和平台而异。
W3C不赞成使用keypress事件类型(http://www.w3.org/TR/DOM-Level-3-Events/#event-type-keypress)
本规范中定义了keypress事件类型,以供参考和完整性,但本规范不赞成使用此事件类型。在编辑上下文中,作者可以改为订阅beforeinput事件。
最后,要回答您的问题,您应该使用keyup
或keydown
检测Firefox和Chrome之间的退格键。
在这里尝试:
$(".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>
我写的东西是为了防止有人在认为自己处于表单域中时碰到退格的问题
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');
}
});
我的数控:
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);" />
试试吧
BackSpace键码为8
最近更新,更清洁:使用event.key
。没有更多的任意数字代码!
note.addEventListener('keydown', function(event) {
const key = event.key; // const {key} = event; ES6+
if (key === "Backspace") {
// Do something
}
});
.key
目前是文档推荐的选项。此外,它支持各种国际键盘,这些键盘针对任何给定的键具有不同的映射。从固定的意义上讲,它们不是任意的,但是在读取代码时是固定的
keypress
会在许多浏览器中触发事件。参见unixpapa.com/js/key.html