Як примусити клавіатуру з цифрами на мобільному веб-сайті в Android


91

У мене є мобільний веб-сайт, і в ньому є деякі inputелементи HTML , наприклад:

<input type="text" name="txtAccessoryCost" size="6" />

Я вбудував сайт у WebViewможливе споживання Android 2.1, так що це буде також додаток для Android.

Чи можна отримати клавіатуру з цифрами замість клавіатури за замовчуванням з буквами, коли цей inputелемент HTML сфокусований?

Або, можливо, встановити його для всієї програми (можливо, щось у файлі маніфесту ), якщо це неможливо для елемента HTML?


Якщо вам потрібна цифрова клавіатура на iOS на додаток до Android, вам слід зробити це: stackoverflow.com/a/31619311/806956
Aaron Gray

2
inputmode="number"Атрибут здається, правильна відповідь в кінці 2019 року: developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes / ... . Відповідь, яка отримала найбільшу кількість голосів під час цього коментаря, передбачає type="number"деякі власні підводні камені; inputmodeСхоже, це впливає лише на віртуальний дисплей клавіатури, а не на поведінку / обмеження самого введення.
SheffDoinWork

Відповіді:


112
<input type="number" />
<input type="tel" />

Обидва вони мають цифрову клавіатуру, коли вхідні дані фокусуються.

<input type="search" /> показує звичайну клавіатуру з додатковою кнопкою пошуку

Все інше, здається, виховує стандартну клавіатуру.


Подивимось сьогодні, а потім повідомимо, чи це спрацює. Дякую, Річарде!
ncakmak

1
Привіт Річард. Жодне не працювало, поле введення все ще відкриває стандартну клавіатуру.
ncakmak


1
Зверніть увагу, що клавіатура для type="tel"гірше вводить цифри, ніж клавіатура для type="number".
Рорі О'Кейн,

2
<input type="text" pattern="\d*" /> також відображається цифрова клавіатура, але лише на iOS, а не на Android .
Рорі О'Кейн,

50

ВАЖЛИВА ПРИМІТКА

Я публікую це як відповідь, а не як коментар, оскільки це досить важлива інформація, і вона приверне більше уваги в цьому форматі.

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

Якщо хтось очікує число, яке починається з нулів, наприклад 000222, тоді у неї, ймовірно, будуть проблеми, оскільки деякі браузери (наприклад, Chrome для настільних ПК) надсилатимуть на сервер 222, а це не те, що вона хоче.

Про type="tel"я не можу сказати нічого подібного, але особисто я цим не користуюся, оскільки його поведінка на різних телефонах може відрізнятися. Я обмежився простими, pattern="[0-9]*"які не працюють в Android


4
Автоматичне переформатування, можливо, не відбувається з type="tel". Специфікація зазначає, що telне застосовує жодного конкретного синтаксису, на відміну від цього number, що вимагає, щоб його значення було дійсним числом із плаваючою комою .
Rory O'Kane

Наскільки це погано? Ми намагаємося пришвидшити процес форми для наших мобільних клієнтів, і це здається очевидним рішенням, але ми також хочемо чогось надійного. Ви опублікували рішуче застереження проти використання цього методу. Цікаво, чи не могли б Ви дещо детальніше це описати?
Philll_t

@Philll_t, користувачеві потрібно надіслати дані '000222', але ти на стороні сервера отримуєш натомість '222'. Хіба ви не бачите, що функціональність повністю порушена? Сервер отримує неправильні дані.
user907860

Так, я розумію, що ви маєте на увазі, але я кажу так: скільки відсотків користувачів це бачать? Це проблема у основних мобільних браузерах, таких як Safari та Chrome? Звідки ви знаєте, що це проблема, чи є посилання, яке ви можете надати. Я вірю тобі, я просто хочу дослідити себе і не бачив нічого, що б це наводило на думку, можливо, ти можеш вказати мені в правильному напрямку. Ми просто намагаємось зрозуміти, чи не виграє від цього наша клієнтська база.
Philll_t

1
@Philll_t Я думаю, що найкращим прикладом для цього попередження є поля введення дати народження. Де потрібно ввести вручну день, місяць та рік. І так, все ще існує багато веб-сайтів, які використовують цей стиль замість часто використовуваних засобів вибору дати. Що стосується проблеми в полях введення дати народження, це коли ви вводите свій день або місяць, починаючи з "0", наприклад 08.
Робін Карло Катакутан

8

Це має спрацювати. Але у мене такі ж проблеми на телефоні Android.

<input type="number" /> <input type="tel" />

Я з’ясував, що якщо я не включив jquerymobile-framework, клавіатура правильно відображалася на двох типах полів.

Але я не знайшов рішення вирішити цю проблему, якщо вам дійсно потрібно використовувати jquerymobile.

ОНОВЛЕННЯ: Я з'ясував, що якщо тег форми зберігається поза

<div data-role="page"> 

Цифрова клавіатура не відображається. Це має бути помилка ...


Дякуємо, що заглибились у це. Я не впевнений, що розумію: "якщо тег форми зберігається поза div [data-role = page]". У моєму випадку проблема виникає з формами, які добре вкладені всередину div [data-role = page]. Можливо, проблема в тому, що ці сторінки відображаються, у моєму випадку, як діалогові вікна?
Wytze

6

inputmodeвідповідно до специфікації WHATWG - метод за замовчуванням.

Для пристроїв iOS додавання patternтакож може допомогти.

Для зворотної сумісності type, а також, оскільки Chrome використовує їх, починаючи з версії 66.

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

Дякую за відповідь, я шукав decimalі знайшов тут developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/…
Рамі Аллуш

2

Деякі браузери igoners надсилають на сервер нульовий нуль, коли тип введення - "число". Тому я використовую змішування jquery та html для завантаження цифрової клавіатури, а також переконуюсь, що значення надсилається як текст, а не як число:

$(document).ready(function(){
$(".numberonly").focus(function(){$(this).attr("type","number")});
$(".numberonly").blur(function(){$(this).attr("type","text")});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="numberonly">


3
Це викликає неприємну проблему в Chrome для Android. Коли ви натискаєте на вхід, клавіатура не з’являється. Потім потрібно вдруге натиснути на текстове поле, і тоді клавіатура все-таки придумає клавіатуру з цифровим числом. Я б дуже хотів, щоб у нас був type="digits"варіант, щоб нам не потрібно було мати ці хаки. Я маю на увазі, це не те, що нульове число є настільки рідким (поштові індекси в США є очевидним прикладом).
Jaxidian

2
Я теж стикаюся з тією ж проблемою! встановлення поля "type = tel" - найкраще рішення.
Алі Шейхпур

-2

input type = number

Коли ви хочете надати числове введення, ви можете використовувати значення атрибута вводу HTML5 type = "number".

<input type="number" name="n" />

Ось клавіатура, яка з’являється на iPhone 4:

Знімок екрана iPhone з номером типу вводу HTML5 Android 2.2 використовує цю клавіатуру для type = number:

Знімок екрана Android номера типу вводу HTML5


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