HTML maxlength属性在Chrome和Safari上无法正常工作?

58
<input type="number" maxlength="5" class="search-form-input" name="techforge_apartmentbundle_searchformtype[radius]" id="techforge_apartmentbundle_searchformtype_radius">
这是我用Firebug(在Chrome上)获取的HTML。
在Chrome和Safari中,我可以在表单字段中写入尽可能多的字符。
但当在Firefox或IE10上时,限制就会生效。
我在网上没找到这个问题的解决方法。
注意:type="number"而不是text。
有人之前遇到过这个问题吗?

https://dev59.com/L2Ml5IYBdhLWcg3wTljY - Jay El-Kaake
9个回答

72

<input type="number" oninput="if(this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);" maxlength="2">

<input name="somename"
        oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);"
        type = "number"
        maxlength = "6"
     />


7
在我看来,最佳解决方案。 - Boris
3
可以通过使用"oninput="this.value=this.value.slice(0,this.maxLength)"来完成。 - Ravindra Bhalothia

49

对于 type="number" 的输入框,使用 max 属性。它将指定您可以插入的最大数字。

  <input type="number" max="999" />

如果同时添加最大值和最小值,就可以指定允许值的范围:

  <input type="number" min="1" max="999" />

请查看此示例

编辑

如果出于用户体验的考虑,您希望用户无法输入超过某个特定数字,请使用JavaScript/jQuery,可以参考此示例


3
并非所有浏览器都会限制最大长度。 - Sangram Nandkhile
15
在 Chrome 浏览器 v74 版本中,此操作无效。浏览器会忽略最大值。 - John Henckel

23

maxlength 属性不适用于 type="number" 的输入框。

根据 W3 HTML5 规范,type="number" 元素不能指定以下内容属性,也不适用于它们:accept、alt、checked、dirname、formaction、formenctype、formmethod、formnovalidate、formtarget、height、maxlength、multiple、pattern、size、src 和 width。

参考资料:http://dev.w3.org/html5/spec/Overview.html#number-state-type-number(位于 "Bookkeeping details" 下)。

在 Firefox 和 IE 中,输入框会回退为文本输入框,因此 maxlength 属性会作用于输入框。一旦 Firefox 和 IE 实现了 type="number",它们还应该以不适用 maxlength 的方式实现它。


“min=”10000000000" max="99999999999"不应该适用于11个字符吗?它在我的浏览器上无法工作,无论是Chrome还是Safari(移动版)。” - siniradam

5
对于那些仍然无法使用它的人,请尝试以下操作以启动更粗的数字键盘:
<input type="number" name="no1" maxlength="1" size="1" max="9" pattern="[0-9]*" />

以下是js代码:

$('input[name="no1"]').keypress(function() {
    if (this.value.length >= 1) {
        return false;
    }
});

1
按键事件在移动版Chrome浏览器或PWA上无法正常工作。 - Optimist Rohit

3

以下是一个使用 type="number"maxlength 的示例,可在Chrome、IE和其他浏览器中正常工作。希望对您有所帮助!

<!DOCTYPE html>
<html>

    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">

        </script>
        <script>
            function test(id, event) {
                var element = $("#" + id);
                var len = element.val().length + 1;
                var max = element.attr("maxlength");

                var cond = (46 < event.which && event.which < 58) || (46 < event.keyCode && event.keyCode < 58);

                if (!(cond && len <= max)) {
                    event.preventDefault();
                    return false;
                }
            }
        </script>
    </head>

    <body>
        <input id="test" size="3" type="number" maxlength="3" onkeypress="test(this.id, event)">
    </body>

</html>

这段代码在Chrome和Safari上输入数字类型时工作得非常完美。谢谢!这个代码救了我的一天! - Ganesh Pandhere
这将防止在表单字段中使用退格键,因此键码也应该被列入白名单。或许还有“tab”和“enter”。 - Klaas van der Weij

2
说到HTML 4.01,没有"number"这种类型。 说到HTML 5,如果http://www.w3schools.com/html5/html5_form_input_types.asp是正确的话,FF和IE目前还不知道数字类型。 /编辑:因此,FF和IE可能会回退到"text",这就是为什么maxlength会起作用的原因。

1

对于使用React的人来说,如果有人在这里遇到了问题,这个解决方案对我很有效 :)

<input type="number" name="expiry" placeholder="Expiry" onChange= 
{this.handleInputChange} onFocus={this.handleInputFocus} onInput={(event)=>event.target.value=event.target.value.slice(0,event.target.maxLength)} 
maxLength="4" />

为什么不直接使用HTML max="9999",这样做与现有答案相比有何优势? - Zach Jensz

1

我使用以下 jQuery 代码解决了问题:

$('input[type="number"]').on('keypress', function (e) {
    var maxlength = $(this).prop('maxlength');
    if (maxlength !== -1) {  // Prevent execute statement for non-set maxlength prop inputs
        var length = $(this).val().trim().length;
        if (length + 1 > maxlength) e.preventDefault();
    }
});

如果您想要设置每个的maxlength属性,就像文本输入框一样,只需进行设置。


0

对于正在使用 React 并且来到这里的人:

  <input name="maxNumber"
            onInput= {(event)=> event.target.value.length > 1 ? 
                                event.target.value = 
                                event.target.value.slice(0, 1)
                                : 
                                event.target.value
                        }
            type = "number"
    />

在这种情况下,1是值的最大长度。您可以放置任何内容并更改这些值。

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