有没有办法强制数字键盘出现在电话<input type="text">?我刚刚意识到,<input type="number">在HTML5中是“浮点数”,所以它不适合信用卡号,邮政编码等。

我想模拟<input type="number">的数字键盘功能,用于接受浮点数以外的数值的输入。是否有其他合适的输入类型可以做到这一点?


当前回答

试试这个:

$(document).ready(function() {
    $(document).find('input[type=number]').attr('type', 'tel');
});

参见:https://answers.laserfiche.com/questions/88002/Use-number-field-input-type-with-Field-Mask

其他回答

使用type="email"或type="url"至少在某些手机上可以给你一个键盘,比如iPhone。对于电话号码,你可以使用type="tel"。

<input type="text" inputmode="numeric">

使用输入模式,你可以给浏览器一个提示。

有一个简单的方法来实现这种类型的行为(比如如果我们想在输入字段中使用文本格式,但仍然希望显示数字键盘):

我的输入:

<input inputMode=“numeric” onChange={handleInputChange} />

提示:如果你想要这种类型的行为(逗号分隔的数字) 然后遵循handleInputChange实现(这是基于上述状态的反应)

所有发布的答案都会触发数字键盘,这不是OP要求的。我发现在文本输入中触发type='number'键盘的唯一方法是使用CSS和JS。

诀窍是创建第二个数字输入,使用css将其重叠在文本输入的顶部。

<style type="text/css">
    /* hide number spinners on inputs */
    input::-webkit-outer-spin-button,
    input::-webkit-inner-spin-button {
        -webkit-appearance: none;
        margin: 0;
    }
    input[type=number] {
        -moz-appearance:textfield; /* Firefox */
    }
    .hidden-number {
        margin-top: -26px;
    }
</style>


<form method="post" action="submit.php">
    <input class="form-control" type="text" name="input_name">
    <input class="form-control hidden-number" type="number" id="input_name">
</form>

使用JavaScript,当您的数字输入获得焦点时,它将触发您想要的键盘。然后,您必须删除type='number'属性,这将阻止您输入除数字以外的任何内容。然后将文本输入中的任何内容转移到数字输入中。最后,当数字输入失去焦点时,将其内容转移回文本输入并替换其type='number'属性。

<script type="text/javascript">
    $(".hidden-number").on("focus", function(){
        $(this).removeAttr("type");
        var text_input = $("input[name="+this.id+"]");
        $(this).val(text_input.val());
        text_input.val("");
    });

    $(".hidden-number").on("focusout", function(){
        var text_input = $("input[name="+this.id+"]");
        text_input.val($(this).val());
        $(this).attr("type", "number");
    });
</script>

你可以这样尝试:

<input type="number" name="input">
<input type="submit" value="Next" formnovalidate="formnovalidate">

但是要注意:如果您的输入包含数字以外的内容,则不会将其传输到服务器。