Телефон: цифрова клавіатура для введення тексту


178

Чи є спосіб змусити цифрову клавіатуру з'явитися на телефон <input type="text">? Я щойно зрозумів, що <input type="number">HTML5 призначений для "цифр з плаваючою комою", тому він не підходить для номерів кредитних карт, поштових індексів тощо.

Я хочу наслідувати функціоналу цифрової клавіатури <input type="number">, для входів, які приймають числові значення, відмінні від чисел з плаваючою комою. Чи є, можливо, інший відповідний inputтип, який це робить?


Досі не чудова відповідь на поштові індекси. Я знову поставив це питання спеціально для міжнародних поштових кодів тут: stackoverflow.com/questions/25425181 / ...
Райана McGeary

Я зрозумів, хак способу зробити це ..sort з: stackoverflow.com/a/25599024/1922144
davidcondrey

Станом на середину 2015 року є кращий спосіб зробити це: stackoverflow.com/a/31619311/806956
Аарон Грей

Відповіді:


206

Можна зробити <input type="text" pattern="\d*">. Це призведе до появи цифрової клавіатури.

Дивіться тут для більш детальної інформації: Посібник з програмування тексту, Інтернету та редагування для iOS

<form>
  <input type="text" pattern="\d*">
  <button type="submit">Submit</button>
</form>


23
Якщо ви просто хочете, щоб числова клавіатура не хотіла перевіряти (наприклад, у Chrome), ви можете помістити атрибут novalidate у форму. <form ... novalidate>
Брайан

4
Я виявив, що \d*це не працює і [0-9]потрібно. Зауважте, що це буде працювати type='numeric'. Це пропонується на основі посилання на пов'язані документи для поштового індексу.
Бретт Райан

11
Це працює до тих пір, поки вам потрібні ТІЛЬКИ числові значення. Номери з плаваючою комою, для яких потрібна цифра '.' (або "," для деяких регіонів) не можна вводити, оскільки клавіатура не містить цих символів.
DrHall

2
Якщо мені потрібно скористатися. (крапка), як я можу ним користуватися? ця картина показує лише [0-9]

15
<type type = "text" pattern = "\ d *"> не працює на android? Я тестував на ios і успішно працював, але не працював на android. як я можу це вирішити
kamal

158

Станом на середину 2015 року, я вважаю, що це найкраще рішення:

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

Це дасть вам цифрову клавіатуру для Android та iOS:

введіть тут опис зображення

Це також дає очікувану поведінку на робочому столі за допомогою кнопок зі стрілками вгору / вниз та зручною клавішкою зі стрілкою вгору / вниз:

введіть тут опис зображення

Спробуйте в цьому фрагменті коду:

<form>
  <input type="number" pattern="[0-9]*" inputmode="numeric">
  <button type="submit">Submit</button>
</form>

Комбінуючи і те, type="number"і pattern="[0-9]*ми отримуємо рішення, яке працює всюди. І, його пересилання сумісний з майбутнім запропонованим inputmodeатрибутом HTML 5.1 .

Примітка: Використання шаблону призведе до перевірки нативної форми браузера. Ви можете відключити це за допомогою novalidateатрибута, або ви можете налаштувати повідомлення про помилку для невдалої перевірки за допомогою titleатрибута.


Якщо вам потрібно ввести провідні нулі, коми або букви - наприклад, міжнародні поштові індекси - ознайомтеся з цим незначним варіантом .


Кредити та подальше читання:

http://www.smashingmagazine.com/2015/05/form-inputs-browser-support-issue/ http://danielfriesen.name/blog/2013/09/19/input-type-number-and-ios- цифрові клавіатури /


1
HTML5 type="number" специфікація каже такі атрибути контенту не повинні бути визначені і не застосовуються до елементу: ... INPUTMODE
Tgr

2
@Tgr Ahh, хороший улов. Здається, специфіка хоче, щоб люди користувалися, <input type="text" inputmode="numeric">і вона хоче, щоб мобільні браузери дивились, inputmodeщоб визначити, чи відображається вона з клавіатури чи повної клавіатури. Оскільки жоден браузер не підтримує inputmode, я не впевнений, як це буде реалізовано на настільних та мобільних браузерах. Наприклад: Чи дозволять браузери настільних ПК вводити літери <input type="text" inputmode="numeric">? Якщо так, то це проблема. <input type="number">перешкоджає цьому, допускаючи лише номери. Можливо, нам доведеться почекати, поки браузери почнуть його застосовувати, і тоді ми зможемо оновити цю відповідь.
Аарон Грей

2
Підтримка type="number"є гідною , але він може відобразити лічильник , який не має особливого сенсу для , наприклад , номери кредитних карт.
Тгр

2
Маючи type = "number" - це біль у дупі X (. Якщо введення недійсне, ви не зможете отримати значення вводу в JS, ви не можете отримати позицію курсора тощо.
Nicu Сурду

2
This attribute applies when the value of the type attribute is text, search, tel, url, email, or password, otherwise it is ignored.
Майкл Лаффарг

61

Я виявив, що принаймні для полів, подібних до "парольного коду", виконання чогось подібного до <input type="tel" />кінця створює найбільш автентичне поле, орієнтоване на число, і це також має перевагу від автоматичного форматування . Наприклад, у мобільному додатку, який я нещодавно розробив для Hilton, я закінчив це:

Дисплей веб-додатків iPhone із тегом вводу, що має тип TEL, який створює дуже пристойну цифрову клавіатуру на відміну від номера типу, який автоматично відформатоване та має дещо меншу інтуїтивну конфігурацію вводу

... і мій клієнт був дуже вражений.

<form>
  <input type="tel" />
  <button type="submit">Submit</button>
</form>


4
Проблемою для мене було не автоматичне форматування, а валідація. Введення типу numberвимагає строгих правил щодо кількості в багатьох браузерах. Якщо користувач додасть простір (або кома) для розділення тисяч, ви не отримаєте БУДЬ-якого значення з вхідних даних. Так, навіть у JavaScript input.valueбуде порожньо. Введення типу telне обмежується певним форматом, тому користувач може все-таки вводити що завгодно, і перевірка - це окремий процес (для розробника, який може обробляти).
Nux

Як я можу використовувати десяткові числа на цій клавіатурі
Анто,

11

Якщо ви користуєтесь type="email"або type="url", ви отримаєте клавіатуру принаймні на деяких телефонах, таких як iPhone. Для телефонних номерів можна використовувати type="tel".


9

Існує небезпека використання <input type="text" pattern="\d*">клавіші цифрової клавіатури. Що стосується Firefox та chrome, регулярний вираз, що міститься в шаблоні, змушує браузер перевірити введення цього виразу. помилки будуть виникати, якщо вона не відповідає шаблону або залишена порожньою. Будьте в курсі ненавмисних дій в інших браузерах.


6
Додавання novalidateатрибута до вмісту form elementмає вирішувати проблеми з автоматичною перевіркою. Не забудьте зробити деяку перевірку самостійно.
Юстус Ромійн


4

Я думаю, що type="number"це найкраще для семантичної веб-сторінки. Якщо ви просто хочете змінити клавіатуру, ви можете використовувати type="number"або type="tel". В обох випадках iPhone не обмежує введення користувача. Користувач все ще може ввести (або вставити) будь-які символи, які він / вона хоче. Єдина зміна - це клавіатура, показана користувачеві. Якщо ви хочете будь-яке обмеження поза цим, вам потрібно використовувати JavaScript.


8
Проблема у мене полягає в тому, що тип = "число" повинен бути призначений лише для номерів з плаваючою комою - тому жодних кредитних карт, поштових індексів та ряду інших чисел не існує лише рядків. Я сподівався, що існує як семантичний спосіб його кодування, так і правильний дисплей клавіатури. Я вважаю, що відповідним типом буде type type = "text", але тоді відображається неправильна клавіатура. Якщо ви могли вказати мені на якийсь JavaScript, щоб це зробити, це вирішило б обидві проблеми.
Тамі

2
type="number"призначений для поплавця. type="text"є для рядка. Те, що ви насправді хочете, є цілим числом. Я думаю, що float ближче до цілого числа, ніж рядок. Що ти думаєш?
Кіт Чен

6
Одне, на що слід остерігатися типу = "число", - це те, що Chrome принаймні змусить введення даних бути числом - це порушить номери кредитних карт, введених пробілами (наприклад)
Джон Картер,

8
@therefromhere Це також перетворить поштові індекси, як 01920і раніше 1920.
ceejayoz

він також буде безлад , якщо користувач має різний набір мов в їх браузері stackoverflow.com/questions/5345095 / ...
dalore

4

Для мене найкращим рішенням було:

Для цілих чисел, що відображає 0-9 на Android та iphone

<label for="ting">
<input id="ting" name="ting" type="number" pattern="[\d]*" />

Ви також можете зробити це, щоб сховати спінери в firefox / chrome / safari, більшість клієнтів вважають, що вони виглядають некрасиво

 input[type=number]::-webkit-inner-spin-button,
 input[type=number]::-webkit-outer-spin-button {
      -webkit-appearance: none;
      margin: 0;
 }

 input[type=number] {
      -moz-appearance:textfield;
 }

І додайте novalidate = 'novalidate' до елемента форми, якщо ви робите спеціальну перевірку

Ps на всякий випадок, якщо ви насправді хотіли, щоб цифри з плаваючою точкою зрештою були, додайте до будь-якої точності, яка вам здається, додасть " на андроїд

<label for="ting">
<input id="ting" name="ting" type="number" pattern="[\d\.]*" step="0.01" />

1

У 2018 році:

<input type="number" pattern="\d*">

працює як для Android, так і для iOS.

Я протестував на Android (^ 4.2) та iOS (11.3)


0

Ви можете спробувати так:

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

Але будьте обережні: Якщо ваш вхід містить щось інше, ніж число, воно не буде передано серверу.


0

Я не міг знайти тип, який найкраще працював для мене у будь-яких ситуаціях: мені було потрібно за замовчуванням цифровий запис (наприклад, запис "7.5"), але також у певний час дозволяти текст ("пройти", наприклад). Користувачі хотіли цифрову клавіатуру (наприклад, запис 7.5), але потрібно було періодично вводити текст (наприклад, "пройти").

Швидше те, що я зробив, було додати прапорець до форми та дозволити користувачу перемикати мій вхід (id = "inputSresult") між type = "число" та type = "text".

<input type="number" id="result"... >
<label><input id="cbAllowTextResults" type="checkbox" ...>Allow entry of text results.</label>

Потім я підключив обробник кліків до прапорця, який перемикає тип між текстом і номером на основі того, чи встановлено прапорець вище:

$(document).ready(function () {
    var cb = document.getElementById('cbAllowTextResults');
    cb.onclick = function (event) {
        if ($("#cbAllowTextResults").is(":checked"))
            $("#result").attr("type", "text");
        else
            $("#result").attr("type", "number");

    }
});

Це добре спрацювало для нас.




Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.