event.preventDefault()不适用于android chrome

时间:2017-02-02 20:30:12

标签: javascript

event.preventDefault()无法在Chrome Android操作系统上运行。而同样的行动正在对Chrome IOS起作用。 我甚至使用了event.stopPropagation(),event.stopImmediatePropagation()。

HTML:

 <input class="otherAmount" type="text"id="pVal" name="pVal" onkeydown="validatePaymentToTwoDecimal(this,event);"/>         

Java脚本:

function validatePaymentToTwoDecimal(el, evt) {

        if(!$.isNumeric(evt.key)|| evt.key=="."){
            evt.preventDefault();
            evt.stopPropagation();
            evt.stopImmediatePropagation();
            return false;
        } else {
              return true;
        }
}

2 个答案:

答案 0 :(得分:4)

基于an answer for a similar question,你应该可以这样做来过滤输入:

jQuery解决方案

$("#pVal").on(
    "input change paste",
    function filterNumericAndDecimal(event) {
        var formControl;

        formControl = $(event.target);
        formControl.val(formControl.val().replace(/[^0-9.]+/g, ""));
    });

Vanilla JavaScript解决方案

var pInput;

function filterNumericAndDecimal(event) {
    var formControl;

    formControl = event.target;
    formControl.value = formControl.value.replace(/[^0-9.]+/g, ""));
}

pInput = document.getElementById("pVal");
["input", "change", "paste"].forEach(function (eventName) {
    pInput.addEventListener(eventName, filterNumericAndDecimal);
});

这可以通过使用正则表达式删除数字和小数点字符来实现。

答案 1 :(得分:0)

替代解决方案是使用 textInput 事件

const inpt = getElementById('pVal')
inpt.addEventListener('textInput', evt => {
    evt.key = evt.data
    if(!$.isNumeric(evt.key)|| evt.key=="."){
            evt.preventDefault();
        } 
})

适用于 Android Chrome