如何限制iPhone上HTML5数字输入字段可以输入的字符数

问题描述 投票:0回答:12

对于以下标记,“maxlength”、“min”或“max”HTML 属性似乎都无法在 iPhone 上达到预期效果:

 <input type="number" maxlength="2" min="0" max="99"/>

不限制位数或输入数字的值,而是保留在 iPhone 4 上输入的数字。此标记适用于我们测试的大多数其他手机。

什么给予?

有什么解决办法吗?

如果它对解决方案很重要,我们使用 jQuery mobile。

谢谢!

iphone html jquery-mobile input
12个回答
52
投票

示例

JS

function limit(element)
{
    var max_chars = 2;
         
    if(element.value.length > max_chars) {
        element.value = element.value.substr(0, max_chars);
    }
}

HTML

<input type="number" onkeydown="limit(this);" onkeyup="limit(this);">

如果您使用 jQuery,您可以稍微整理一下 JavaScript:

JS

var max_chars = 2;
    
$('#input').keydown( function(e){
    if ($(this).val().length >= max_chars) { 
        $(this).val($(this).val().substr(0, max_chars));
    }
});
    
$('#input').keyup( function(e){
    if ($(this).val().length >= max_chars) { 
        $(this).val($(this).val().substr(0, max_chars));
    }
});

HTML

<input type="number" id="input">

6
投票

您可以使用此代码:

<input type="number" onkeypress="limitKeypress(event,this.value,2)"/>

和js代码:

function limitKeypress(event, value, maxLength) {
    if (value != undefined && value.toString().length >= maxLength) {
        event.preventDefault();
    }
}

3
投票

jQuery 的另一个选项,但是 onkeypress 事件...;)

$("input[type=number]").on('keypress',function(e) { 
    var $that = $(this),
    maxlength = $that.attr('maxlength')
    if($.isNumeric(maxlength)){
        if($that.val().length == maxlength) { e.preventDefault(); return; }

        $that.val($that.val().substr(0, maxlength));
    };
});

2
投票

看看这个,它对我有用;

HTML5中有minlength验证属性吗?


2
投票

根据 MDN

maxlength
不用于
number
。您是否尝试过:

<input type="number" min="0" max="99" />

<input type="range" min="0" max="99" />

1
投票

正如 Andrew 所说,您需要将类型更改为范围,此外,您还会遇到 IE 和 FF 以及可能旧的 ipad 浏览器的问题,因为它来自 HTML 5,而且它是“一种新的”。看看这个用 JS 尝试过范围的人, 使用javascript指定要在数字字段中输入的数字范围


1
投票

您可以使用 JavaScript 检查框中有多少个字符,如果太多,则删除一个: http://www.webcodingtech.com/javascript/limit-input-text.php


1
投票

这里有一个更优化的 jQuery 版本,可以缓存选择器。 它还使用了输入类型数字不支持的 maxlength 属性。

// limits the input based on the maxlength attribute, this is by default no supported by input type number
$("input[type=number]").on('keydown keyup',function(){ 
    var $that = $(this),
    maxlength = $that.attr('maxlength')
    if($.isNumeric(maxlength)){
        $that.val($that.val().substr(0, maxlength));
    };
});

1
投票

我使用输入事件监听器

var storeName = document.getElementById('storeName')
var storeNameCounter = document.getElementById('storeNameCounter')       
    storeName.addEventListener('input', (event) => {
        var max_chars = 50         
        if(event.target.value.length > max_chars) {
        event.target.value = event.target.value.substr(0, max_chars)
        }
        storeNameCounter.innerHTML = `${event.target.value.length}/50`       
    })
<input type="text" 
    id="storeName"
    name="store_name" 
    class="store_name"
    placeholder="store name" 
    x-moz-errormessage="This field should not be left blank." 
    maxlength="500" required>   
<span id="storeNameCounter" class="store_name_counter">0/50</span>  


0
投票

我知道这个问题已有一年了,但我不喜欢所选的答案。因为它的工作方式是显示键入的字符,然后将其删除。

相比之下,我会提出另一种类似于威尔的方法,它只是更好地防止角色被显示。另外,我还添加了一个

else if
块来检查字符是否是数字,然后它是验证数字字段的一个很好的功能。

HTML

<input type="number" onkeydown="limit(this);">

JS

function limit(element)
{
    var max_chars = 2;
    if (arguments[1].char !== "\b" && arguments[1].key !== "Left" && arguments[1].key !== "Right") {
        if (element.value.length >= max_chars) {
            return false;
        } else if (isNaN(arguments[1].char)) {
            return false;
        }
    }
}

0
投票

这是 Tripex 答案,针对允许删除键进行了优化,在打字和粘贴时有效。

$(document).on("keyup", "#your_element", function(e) {
    var $that = $(this),
    maxlength = $that.attr('maxlength');
    if ($.isNumeric(maxlength)){
        if($that.val().length === maxlength) {
            e.preventDefault();
            // If keyCode is not delete key 
            if (e.keyCode !== 64) {
                return;
            }
        }
        $that.val($that.val().substr(0, maxlength));
    }
});

0
投票

我使用 jQuery 的解决方案:

JS

function maxlength(event)
{
    const ele = event.target;
    const maxlength = ele.maxLength;
    const value = ele.value;
    if (event.type == 'keypress')
    {
        if (value.length >= maxlength)
        {
            event.preventDefault();
        }
    }
    else if (event.type == 'keyup')
    {
        if (value.length > maxlength)
        {
            ele.value = value.substring(0, maxlength);
        }
    }
}

$('input[type=number][maxlength]').on('keypress keyup', maxlength);

HTML

<input type="number" maxlength="2">
© www.soinside.com 2019 - 2024. All rights reserved.