我编写了以下代码,以便用户仅输入数字。它在除FireFox之外的所有浏览器中都能正常工作
如果用户单击退格键,则在FireFox中输入数字后,它将无法正常工作。下面是代码。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">
function getKeyCodeFromEvent(e) {
if (typeof e == "object" && typeof e.which == "number") {
return e.which;
}
return window.event.keyCode;
}
function checkEntry(e) {
var keyCode = this.getKeyCodeFromEvent(e);
var regularExpression = /^[0-9.]+$/;
return regularExpression.test(String.fromCharCode(keyCode));
}
</script>
</head>
<body>
<input type="text" onkeypress="return checkEntry(event);" />
</body>
</html>
最佳答案
当有人按下Backspace键时,您会从8
获得值getKeyCodeFromEvent
。在String.fromCharCode(8);
中运行它会返回以下unicode值:``。这与您的正则表达式不匹配,因此失败。
您可以通过在将其转换为String值之前检查是否允许使用退格键,Delete键,Tab键,左右键来解决此问题。但是,您将需要使用keydown
事件,因为keypress
不会返回某些键的值,例如left或right。
不过,在限制用户移动时要特别小心,因为当网站无法正常运行时,这很容易使人们生气。
<script>
function getKeyCodeFromEvent(e) {
if (typeof e == "object" && typeof e.which == "number") {
return e.which;
}
return window.event.keyCode;
}
function checkEntry(e) {
var keyCode = getKeyCodeFromEvent(e);
var regularExpression = /^[0-9.]+$/;
// If the key is backspace, tab, left, right or delete
if([8,9,37,39,46].indexOf(keyCode) !== -1 || e.ctrlKey || e.metaKey) {
return true;
}
if(!regularExpression.test(String.fromCharCode(keyCode))) {
e.preventDefault();
e.returnValue = false;
return false;
}
}
// I took the liberty of moving your event from the HTML into JavaScript, where it belongs
document.addEventListener("DOMContentLoaded", function() {
document.getElementById('numberinput').addEventListener("keydown", checkEntry, false);
}, false);
</script>
<input type="text" id="numberinput" />
http://jsfiddle.net/8hzwLjfz/6/
关于javascript - 在Firefox中验证期间,退格键不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33168769/