cordova 使用输入文本在iPhone中显示数字键盘

iecba09b  于 2022-11-15  发布在  其他
关注(0)|答案(7)|浏览(169)

请注意,使用input type="number"可以显示如下数字键盘:

是否可以使用input type="text"来显示相同的数字键盘?我希望使用pattern="\d*"来显示数字键盘,因为该值可能包含小数位。
我之所以用input type="text"而不是input type="number",是因为如果在数字字段中输入非数字,就无法取回值。例如,如果我输入ABC,它会自动变空。在我看来,使用input type="text"会更容易进行这种控制。

c8ib6hqw

c8ib6hqw1#

如果您输入的是真实数字、整数或小数,则使用HTML5 type="number"输入。这将在Android设备上显示正确的键盘(假设Windows phone也是如此)。
然后,技巧是在该属性上放置一个pattern="[0-9]*",以在iOS上强制使用特殊的数字键盘。
1.这不会将小数或减号标记为无效,因为 * 模式属性在type=“number”字段上实际上无效!* 并且
1.这是获得iOS数字键盘的 * 唯一 * 方法。看看字母键盘的数字部分(如上面的截图所示)与真正的数字键盘之间的区别。

最后一个注意事项,请确保不要使用非真实数字的数字类型字段(例如,带前导零的邮政编码或带逗号或空格的产品代码)。数字输入字段不得提交非真实数字的值!(取决于浏览器/设备)

rnmwe5a2

rnmwe5a22#

苹果在iOS上提供的数字键盘是一个可悲的笑话。但是,你可以使用以下方法修复这个问题:

inputmode="decimal"

在Android上工作正常,偏离路线。
:)

lskq00tm

lskq00tm3#

使用以下代码:

<input type="number" pattern="[0-9]*" />
toiithl6

toiithl64#

还有其他类型的可以显示数字的键盘。
使用type=“number”你什么都不能做。它只接受数字。但是如果你使用type=“tel”,这是一个丑陋的黑客,但它工作。
以下是我的邮政编码示例:

<input type="tel" id="Address_ZipCode" class="zip-code" pattern="^\d{2}-\d{3}$" maxlength="6">

然而,在某些屏幕键盘上使用“-”键会有问题,您可以通过在JavaScript中的指定字符数后添加破折号来解决此问题,如下所示:

// Zip Code dashes
$('input[type="tel"].zipCode').keyup(function(event) {
    var t = event.target, v = t.value;
    if (v.length == 2) { t.value = v + '-'; }
});

(请原谅jQuery)。除了使用type=“tel”,你还可以使用type=“text”和pattern属性,但我还没有测试过它。很可能它在大多数浏览器上都不起作用。

chhqkbe1

chhqkbe15#

到目前为止,我还找不到任何解决办法。
但是一个可能的技巧是使用type=“number”并在javascript中用document.getElementById(“element”).type=“text”;
但这也会清除ABC,但它会接受数字、逗号和小数

ca1c2owp

ca1c2owp6#

试试这个变通方法。对我很有效。
它会将文字转换为数字,然后返回文本。这将迫使ios在第一次属性改变时切换到数字键盘。setSelectionRange用于选择输入值。

$(function(){

    $("input[type='text']").on('mouseup', function(e){
        e.preventDefault();
    });

    $("input[type='text']").on('focus click', function(e){
        $(this).prop('type', 'number');
        var obj = $(this);
        setTimeout(function(){
            obj.prop('type', 'text');
            document.getElementById(obj.attr('id')).setSelectionRange(0, 9999);
        }, 50);     
    });
});
tf7tbtn2

tf7tbtn27#

我在不同的iOS设备上测试了一些选项
最受支持的方法是使用pattern属性,例如<input type="text" pattern="[0-9]*" />,因为它可以在多个iOS版本上工作:
iPhone 13(iOS 15.1)

iPhone 8(iOS 11.4)

iPhone 6(iOS 8.1)

如果您只需要支持iOS 12.2+,则仅使用inputmode属性即可

相关问题