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