Какой лучший способ проверки ввода текста HTML, как он напечатан? У всех способов, которые я знаю, есть некоторые недостатки:
-
Используя
$.keypress
вы имеете доступ только к старому входному значению, а не к новому. Кроме того, некоторые события (например, вырезание/вставка с помощью мыши) не будут обнаружены. -
Использование
$.change
работает только тогда, когда ввод теряет фокус. -
Этот вопрос предлагает решение, в котором вы используете опрос для отслеживания изменений свойств. В принципе, можно проверить новое значение в обратном вызове, а затем вернуться к старому, если оно недействительно. Однако, помимо того, что требуется опрос, я не уверен, что он свободен от условий гонки.
-
В этой статье предлагается использовать специальные функции браузера, если они есть, и вернуться к опросу, если ни одна из них не доступна. Похоже, лучший подход до сих пор.
-
[Update], как указано в ответах,
$.keyup
дает доступ к значению после обновления. Тем не менее, он не только не работает для вырезания/вставки мышью, но и не работает, если вы нажимаете и удерживаете клавишу, только после того, как будет введено много. Или, если объединитьkeydown
иkeyup
для сохранения/восстановления старого значения, оно ломается, если пользователь печатает слишком быстро.
Ни одно из приведенных выше решений не является безошибочным или действительно безопасным кросс-браузером. Есть ли лучшие решения, готовые к использованию или готовые? Кажется, это общая проблема, я пытался ответить на подобные вопросы в последнее время, но безуспешно, и мне тоже интересен ответ.
(Хороший аргумент против этой практики также приветствуется, если появятся новые проблемы, которые могут возникнуть, если эта проверка будет реализована; однако, это кажется обычным явлением в других языках, поэтому я сомневаюсь, что это плохая вещь)