【问题标题】:Javascript keycodes not working in firefox but works well in chromeJavascript 键码在 Firefox 中不起作用,但在 chrome 中运行良好
【发布时间】:2017-04-18 19:59:11
【问题描述】:

我只是在进行表单验证,其中电话号码必须是数字!该代码在 chrome 中运行良好,但在 Firefox 和 IE 中运行良好。请给我一些解决方案

我的代码如下

function noLet(event) {
    if (event.keyCode == 46 || event.keyCode==8 || event.keyCode > 47 && event.keyCode <      58) {
        event.returnValue = true;
    } 
    else {
        event.returnValue = false;
    }
}

HTML:

 onkeypress="noLet(e)"><label id="mobph"></label><font 

size="1"><br>Max 10 numbers only allowed!</font> 

【问题讨论】:

标签: javascript


【解决方案1】:

我可以建议以下代码来解决您的问题。这就是我正在做的事情。在 IE、chrome 和 firefox 中测试和工作就像一个魅力:

//return numbers and backspace(charCode == 8) only
function noLet(evt) {
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode >= 48 && charCode <= 57 || charCode == 8)
        return true;
    return false;

【讨论】:

    【解决方案2】:

    您可以使用键/字符代码来检测按下的键是数字还是非数字。首先,您必须检测跨浏览器的键/字符代码是什么(请记住使用event.keypress 作为您的事件,以进一步确保兼容性)。之后,将其从十进制值转换为字符。然后,您可以使用 parseInt() 将其解析为整数,如果函数内的第一个值无法解析为 int,它将返回 NaN。如果是NaN,则阻止默认操作。

    var numbersOnly = function(e){
        var charCode = (typeof e.which === "number") ? e.which : e.keyCode,
            chr = String.fromCharCode(charCode);
        if(isNaN(parseInt(chr, 10))) e.preventDefault();
    }
    
    <input type="text" name="phoneNumber" onkeypress="numbersOnly(event);">
    

    【讨论】:

      【解决方案3】:

      因为至少在 Firefox 上,它在按键处理程序中是 charCode,而不是 keyCode,并且“returnValue”被忽略(调用 preventDefault() 以停止插入)。

      【讨论】:

        【解决方案4】:

        存在浏览器兼容性问题。这是我在一些RND 中找到的解决方案。希望它会以某种方式对您有所帮助; Click Here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多