JQuery preventDefault не работает в браузере браузера android 4.4 по умолчанию
Я работаю с веб-сайтом angular и jquery. У меня есть поле ввода текста для проверки массива чисел с плавающей запятой. Мое требование состоит в том, чтобы запретить пользователю вводить алфавиты и т.д.
Проблема заключается в том, что я использую e.preventDefault()
, но не работает в браузере по умолчанию в Android, но отлично работает в android chrome.
Я много искал, но не смог получить какое-либо решение.
Мой пример кода: -
$('#test').keydown(function (e) {
e.stopPropagation();
e.preventDefault();
e.returnValue = false;
e.cancelBubble = true;
return false;
});
Я также пробовал: -
$('#test').keydown(function (e) {
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
});
Рабочая скрипка
Примечание. - Я не могу использовать событие keypress
, поскольку браузер по умолчанию для Android не может прослушивать это событие.
Ответы
Ответ 1
У меня также была проблема с браузером по умолчанию на Android. preventDefault мне не помог, поэтому я использовал функцию .on jQuery.
$('#test').on('input',function () {
var inputText = $(this).val();
var resultText = inputText.replace(/[^0-9]/g, '');
$(this).val(resultText);
});
Вы можете добавить к регулярному выражению других символов, которые вам нужно разрешить. Надеюсь, что это поможет.
Ответ 2
Я не знаю, почему вы хотите предотвратить ключевое событие, но я думаю, вы просто хотите предотвратить ввод недопустимых символов. Посмотрите, как решить проблему без preventDefault
:
(function(){ // anon function for scope
var prevVal = $("#test").val(); // get initial value of input
$('#test').on("input", function (e) { // input will also handle paste event. it handle every input'
if(/*your `if` here*/ Math.random() > 0.3){
this.value = prevVal; // You shall not pass!
}
prevVal = this.value; // save current valid value
});
})();
http://jsfiddle.net/rk5wuubo/
Надеюсь, он решит вашу проблему повсюду и никогда не забудет о "пасте"!
Ответ 3
Если вы разрабатываете веб-сайт на основе angular, вы должны решить проблему в angular способом.
Здесь пример, как это сделать.
Идея состоит в том, чтобы использовать NgModelController и FormController.
Ответ 4
Используйте $formatters
of angleularjs. Это поможет вам проверить viewValue
, пока не будет установлено значение modelValue
.
Просьба ознакомиться с этим документом: https://docs.angularjs.org/api/ng/type/ngModel.NgModelController