Jquery preventDefault无法在android 4.4默认浏览器上运行

时间:2015-05-15 06:59:51

标签: javascript android jquery html angularjs

我正在使用基于角度和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;
  }
});

Working fiddle

注意: - 我无法使用keypress事件,因为Android默认浏览器无法监听此事件。

4 个答案:

答案 0 :(得分:3)

我在Android上使用默认浏览器也遇到了这个问题。 preventDefault对我没有帮助,所以我使用.on jQuery函数。

    $('#test').on('input',function () {
        var inputText = $(this).val();

        var resultText = inputText.replace(/[^0-9]/g, '');
        $(this).val(resultText);
    });

您可以向正则表达式添加您需要允许的其他字符。希望它有所帮助。

答案 1 :(得分: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/

我希望,它能解决你的问题,永远不会忘记"粘贴"!

答案 2 :(得分:2)

如果您正在开发基于角度的网站,您应该以角度方式解决问题。

Here示例如何执行此操作。

我们的想法是使用NgModelControllerFormController

答案 3 :(得分:1)

请使用angularjs的$formatters。这有助于您在viewValue之前检查modelValue

请仔细阅读此文件:https://docs.angularjs.org/api/ng/type/ngModel.NgModelController