Недавно я столкнулся с этой проблемой при разработке игры, в которой пользователь соединяет устройства с помощью WebSockets. К сожалению, ни одно из упомянутых выше решений не работает.
Короче говоря, в игре участвовал пользователь, подписывающийся на канал через форму на своем телефоне. После подписки они встряхивали устройство, и сценарий воспроизводился на их рабочем столе. Проблема заключалась в том, что всякий раз, когда кто-то встряхивал устройство iOS, всплывало предупреждение «Отменить ввод».
Вот единственные два решения, которые я нашел для этой проблемы.
Не допускайте потери внимания при вводе. Это потребует от вас запретить отправку формы, если ввод является частью формы. Вы также должны прослушивать «touchstart» вместо «click» на любых привязках и предотвращать распространение события touchstart. Это предотвратит фокусировку этого якоря и потерю вашего ввода. У такого подхода наверняка есть недостатки.
Добавьте в окно обработчик события keydown и предотвратите распространение события. Это предотвращает вставку каких-либо значений во вход на устройствах iOS. Мне также пришлось создать объект, который сопоставил бы коды клавиш с нужным персонажем. Это тот путь, которым я закончил, потому что все, что мне нужно было во вводе, было 6-символьным кодом, поэтому мне были нужны только числа. Если вам нужно больше, чем просто цифры, это может быть головной болью. Нажав клавишу, зацепите этот символ с помощью кода клавиши и установите значение ввода. Это заставляет iOS думать, что никакое значение никогда не было вставлено во ввод с клавиатуры, поэтому отменять его нечего.
Имейте в виду, что предотвращение распространения события keydown не предотвращает ввод в стандартном браузере Android, поэтому он просто будет нормально работать. Но это нормально, поскольку это не проблема Android. Вы можете предотвратить вставку повторяющихся значений, прослушивая событие ввода на самом вводе и удаляя прослушиватель нажатия клавиш, если это событие получено.
var codes = {
48: 0,
49: 1,
50: 2,
51: 3,
52: 4,
53: 5,
54: 6,
55: 7,
56: 8,
57: 9
},
myInput = document.getElementById("myInput");
var keydownHelper = function (e) {
e.preventDefault();
myInput.removeEventListener("input", inputHelper);
var val = myInput.value;
// Delete
if (e.keyCode === 8 && val.length) {
myInput.value = val.slice(0, val.length - 1);
return;
}
// If not a number, do nada
if (typeof codes[e.keyCode] === "undefined") { return; }
val += codes[e.keyCode];
myInput.value = val;
};
var inputHelper = function (e) {
e.preventDefault();
window.removeEventListener("keydown", keydownHelper);
};
myInput.addEventListener("input", inputHelper);
window.addEventListener("keydown", keydownHelper);
person
Maxsquatch
schedule
24.04.2013