2015-02-18 4 views
0

Сценарий: У меня есть веб-приложение, где мне нужно захватить все введенные ключевые слова на страницу в центральном месте. Мое первое решение заключалось в том, чтобы постоянно уделять внимание текстовому полю, чтобы все сосредоточиться на нем. Это потрясающе работает для настольных браузеров, но вызывает нежелательный эффект от того, что мягкая клавиатура на мобильных браузерах всегда будет видна. Поскольку ввод с клавиатуры осуществляется из внешнего источника, я не хочу, чтобы клавиатура была видимой до тех пор, пока я не запрошу ее. Поскольку нет прямого пути (который я нашел), чтобы сделать это, я пытался постоянно сосредоточиться на элементе управления, который не вызывает отображение клавиатуры. Я не смог найти элемент управления, который не вызывал отображение клавиатуры, но упустил бы одно из ключевых событий (keydown/keyup/keypress).Мне нужен способ использования их мягкой клавиатуры для мобильных браузеров

Есть ли у кого-нибудь предложение относительно того, как я могу поймать все введенные данные без отображения мягкой клавиатуры?

Примечание: У меня может быть другое решение для настольных компьютеров и мобильных устройств, если необходимо.

Любая помощь приветствуется!

+2

Когда вы говорите, исходя из «внешнего источника», что вы имеете в виду? Попробовали ли вы захватить событие window.keydown, которое не требует целенаправленного ввода? –

+0

Мое предложение состояло в том, чтобы иметь значок клавиатуры, который при нажатии на него будет сфокусирован на (предположительно скрытом) текстовом поле, а не на том, что он всегда сфокусирован (по крайней мере, когда обнаружен мобильный браузер) –

+0

@JesseKernaghan Внешний вход - любой физический устройство подключено или сопряжено с мобильным устройством, которое будет отправлять входные данные. Обычно он использует клавиатурный клин (драйвер виртуальной клавиатуры). – Difinity

ответ

0

Хорошо, так ответ был таким простым, я не могу поверить, что мне потребовалось столько времени, чтобы добраться до него.

Если вы делаете текстовое поле только для чтения, оно не отображает клавиатуру, но все же запускает ключевые события. Это позволило мне принять вход от внешнего источника, не показывая клавиатуру. Я также добавил кнопку переключения клавиатуры, которая просто спрятала текстовое поле только для чтения и показала обычную.

Если бы мое приложение было другим, я мог бы просто добавить и удалить атрибут readonly и применить фокус снова, чтобы иметь тот же эффект.

Спасибо за все ответы, в том числе те, которые были удалены.

+0

Я не понимал, что вам нужен ввод с ключом из источника, отличного от фактической клавиатуры, представленной пользователю - если бы вы были более конкретными, я уверен, что вы получили бы лучший ввод –

+0

Это звучит как хакерский способ делать вещи в любом случае. Поскольку эти данные будут обработаны на стороне клиента, я действительно надеюсь, что вы вообще не планируете доверять этим данным (подтвердите это) –

+0

«Поскольку мой ввод с клавиатуры поступает из внешнего источника, я не хочу, чтобы клавиатура видимо, пока я не попрошу об этом ». ... это указывает на источник, отличный от устройства. Специфичность не была проблемой, интерпретация была. Хотя я не предпочитаю «взломать» его таким образом, ни одно лучшее/жизнеспособное решение не представилось.Учитывая альтернативные методы, я попытался решить эту проблему, это решение очень элегантно! Что касается действительности данных, это не вызывает беспокойства. Только придурок берет входную сторону на стороне клиента без проверки на стороне сервера. Все входные данные уровня сервиса проверяются на стороне сервера. Cheers – Difinity

0
var keyedinput = ""; 
window.addEventListener('keydown', function(event){keyedinput += String.fromCharCode(event.keyCode)}, false); 

keyedinput будет содержать содержимое шпоночного ввода с клавиатурой внешнего типа устройства. Просто укажите его как глобальную переменную, когда это необходимо. Если есть ключ ввода/esc или «конец» (последовательность?), Вы можете просто проверить соответствующий keyCode, чтобы запустить действие с содержимым переменной вместо добавления к нему.

+0

К сожалению, несмотря на то, что ваше решение может отлично работать для настольных браузеров, оно поражает и пропускает для мобильных браузеров (более пропущенных, чем ударов), поскольку оно чаще всего не срабатывает в мобильных браузерах для веб-приложений. Очень жаль, что предыдущий человек, предложивший что-то очень похожее на ваше предложение, решил удалить свой комментарий и весь сопутствующий разговор, потому что он мог бы сэкономить вам немного времени. Спасибо за ваше предложение! – Difinity

Смежные вопросы