Показать цифровую клавиатуру в iPhone с помощью ввода текста

Обратите внимание, что использование input type="number" может отображать цифровую клавиатуру, как показано ниже:

enter image description here

Можно ли использовать input type="text" для отображения одной и той же цифровой клавиатуры? я не нужно отображать цифровую панель с помощью pattern="\d*", потому что возможно, что значение будет содержать десятичное место.

Причина, по которой я хотел бы использовать input type="text" вместо input type="number", заключается в том, что я не могу вернуть значение, если я вводил не число для числа. Например, если я введу ABC, он автоматически станет пустым. Мне кажется, что использование input type="text" будет проще для такого управления.

Ответ 1

Если ваш ввод является истинным числом, целочисленным или десятичным, используйте вход HTML5 type="number". Это приведет к правильной клавиатуре на устройствах Android (предположим, что телефон Windows тоже).

Тогда трюк состоит в том, чтобы поместить этот pattern="[0-9]*" в этот атрибут, чтобы заставить специальную цифровую клавиатуру на iOS. Обратите внимание:

  • Это не будет означать знак десятичного или минус как недопустимый, поскольку атрибут pattern не действителен в поле type = "number"! и
  • Это единственный способ получить цифровую клавиатуру iOS. См. Разницу между секцией номера альфа-клавиатуры (как показано на скриншоте выше) по сравнению с настоящей цифровой клавиатурой.

iOS number keyboards compared

В последнем примечании обязательно НЕ используйте поле типа номера для входов, которые не являются истинными числами (например, zipcodes с ведущими нулями или кодами продуктов с комами или пробелами). Числовое поле ввода НЕ МОЖЕТ ПОДКЛЮЧИТЬ значения, которые не являются истинными числами! (в зависимости от браузера/устройства)

Ответ 2

используйте этот код:

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

Ответ 3

Существуют и другие типы, которые могут отображать числовую клавиатуру.

С типом = "число" вы ничего не можете сделать. Он не примет ничего, кроме цифр. Но если вы используете 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, но я еще не тестировал его. Скорее всего, это не сработает с большинством браузеров.

Ответ 4

Я не смог найти решение для этого на данный момент.

Но один возможный трюк, который вы могли бы сделать, это использовать type = "number" и изменить его в javascript с помощью document.getElementById( "element" ). type = "text";

но, тем не менее, это также очистит ABC, но оно будет принимать запятые и десятичные числа чисел

Ответ 5

Попробуйте этот рабочий стол. Работал для меня.

Он превратит тип в число, а затем вернется к тексту. Это заставит 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);     
    });
});

Ответ 6

Цифровая клавиатура, предоставляемая Apple на iOS, - грустная шутка. Но вы можете исправить это используя:

inputmode="decimal"

Отлично работает на Android, конечно.

:)