如何在 HTML5 数字输入框中限制最大宽度

3

输入框应仅允许输入范围在-9.99至99.99之间的数字。

我在桌面和移动Chrome中测试了下面的页面,但它允许输入大数字,例如99999。

如何使用html5修复此问题? 如果必须要使用Chrome,那我就只能用它。

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <input id="Soiduaeg" name="Soiduaeg" value="" maxlength="5" type="number" pattern="[0-9]+([\.|,][0-9]+)?">
</body>
</html>

尝试使用“max =”5“而不是maxlength”。 - Shaher Jamal Eddin
2个回答

4
你应该在输入元素中添加minmax值,并提供step="any"step="0.01"属性:
<input id="number" type="number" step="any" min="-9.99" max="99.99" />

为了检查输入的值,您需要一些 JavaScript:

var $input = document.querySelector('#number');
$input.addEventListener('blur', function(){
    var val = parseFloat($input.value),
    min = parseFloat($input.getAttribute('min')),
    max = parseFloat($input.getAttribute('max'));

    if (val > max) {
        $input.value = max;
    } else if (val < min) {
        $input.value = min;
    }
});

演示代码


这允许从键盘输入更大的数字。按Tab键会保留无效数字。如何修复以禁止无效数字? - Andrus
这会在没有任何提示的情况下将无效数据保存到数据库中。表单是使用ajax提交的。可以使用热键保存表单。在这种情况下,模糊不会发生。如何解决?也许可以在ajax提交方法中循环遍历html5控件,显示消息并取消提交,如果值无效。 - Andrus
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Andrus
@Andrus 你应该在后端(PHP/APSX/NodeJS/Java/Go/任何语言)中验证数据,事件监听器只是用于快速数据评估(我甚至不在生产环境中使用它们)。如果需要,Key Up方法也可以,但我不喜欢它,因为如果输入的数字太大或太小(它会将值设置为最小可用值),我就无法编辑值。然而,服务器端验证比试图在前端解决所有问题更好。在前端,任何人都可以删除绑定在表单中的JS或规则,或者通过使用ajax提交。 - Bogdan Kuštan

0

对于十进制数,将其绑定到oninput事件

例如:5.2(nnnnn.dd)

//max number positions 5 before '.' or ','
var n = 5;
//max number of digit
var d = 2;
//max text length 8
var l = n + d + 1;

if (this.value.length > n && 
   (this.value.indexOf('.') == -1 && this.value.indexOf(',') == -1))
{ 
    this.value = this.value.slice(0,n); 
} 
else 
{ 
    if (this.value.length > l)  
        this.value = this.value.slice(0,l); 
};
if (
    (this.value.indexOf('.') != -1 && this.value.length - d >= this.value.indexOf('.')) ||
    (this.value.indexOf(',') != -1 && this.value.length - d >= this.value.indexOf(','))
)
{
    this.value = this.value.slice(0, this.value.length - (this.value.length - (this.value.indexOf('.') +d+1)));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接