event.returnvalue = false在firefox中不起作用?

时间:2015-01-07 06:35:21

标签: javascript jquery internet-explorer firefox internet-explorer-8

我正在开发一个旧的应用程序,使其与firefox兼容。由于旧的应用程序不使用Jquery,我必须使用Javascript来完成所有的工作。

我有一个用于输入日期的输入字段。此字段应仅允许0-9数字值。所以我修改了这样的代码,使其与firefox兼容。

var event = window.event || ffEvent ; //ffEvent is the function argument
var intKeyCode = event.keyCode || event.which;
if (intKeyCode < 48 || intKeyCode > 57){
 if(event.preventDefault){
   event.preventDefault();
 }
 else{
   event.returnValue = false;
 }
}

但现在问题是event.returnValue = false允许像Backspace,Tab,Delete,Arrow buttons这样的键,event.preventDefault()不允许这些按钮。必须允许这些按钮用于输入字段。

对于firefox,有没有与event.returnValue=false

完全相同的解决方案

2 个答案:

答案 0 :(得分:0)

为什么不使用keyCodes检查字符是否为数字

function isNumberKey(evt)
{
    var charCode = (evt.which) ? evt.which : event.keyCode
    var event = window.event || ffEvent ; //ffEvent is the function argument
    var intKeyCode = event.keyCode || event.which;
    if (intKeyCode > 31 && (intKeyCode < 48 || intKeyCode > 57))
         return false;

    return true;
}

在输入字段的按键中调用此事件,如

onkeypress="return isNumberKey(event)

答案 1 :(得分:0)

当密钥是您想要允许的密钥之一时,您只需跳过event.preventDefault()

window.onload = function () {
    document.getElementById('myField').onkeypress = function (event) {
        var keyCode = event.keyCode || event.which,
            allowedKey = keyCode === 8  ||  // backspace
                         keyCode === 9  ||  // tab
                         keyCode === 13 ||  // enter
                         keyCode === 37 ||  // left
                         keyCode === 39 ||  // right
                         keyCode === 46 ||  // del
                         (keyCode >= 48 && keyCode <= 57);
        if (!allowedKey) {
            event.preventDefault();
        }
    };
};
<input type="text" id="myField" />