gpt4 book ai didi

javascript - Firefox 验证期间退格键不起作用

转载 作者:行者123 更新时间:2023-11-27 23:46:07 26 4
gpt4 key购买 nike

我编写了以下代码,以便用户仅输入数字。它在除 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>

最佳答案

当有人按下退格键时,您会从 getKeyCodeFromEvent 获取值 8。在 String.fromCharCode(8); 中运行它,然后返回以下 unicode 值:``。这与您的正则表达式不匹配,因此失败。

您可以通过检查是否允许使用退格键、删除键、制表符、向左键和右键,然后再将它们转换为字符串值来解决此问题。不过,您需要使用 keydown 事件,因为 keypress 不会返回某些键的值,例如向左或向右。

不过,在限制这样的用户移动时要小心,因为当网站无法按人们期望的方式运行时,这可能很容易让人们生气。

<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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com