js在firefox中禁用退格功能

时间:2012-09-02 14:26:09

标签: javascript regex firefox textinput keycode

我有以下javascript以防止用户在文本字段中输入无效字符。它在chrome中运行良好,但在firefox中运行不佳。它阻止在firefox的文本字段中输入 backspace 键。

function onlyNumbers(evt) {
    var theEvent = evt || window.event;
    var key = theEvent.keyCode || theEvent.which;
    key = String.fromCharCode( key );
    var regex = /[0-9]|\./;
    if( !regex.test(key) ) {
        theEvent.returnValue = false;
        if(theEvent.preventDefault) theEvent.preventDefault(); 
    }
}

任何人都可以看看并建议修复firefox,以防止退格键操作文本字段?

可能我想,为退格字符添加正则表达式可以在这里完成工作。有谁知道,如何添加正则表达式匹配退格

编辑:

此外,上面的代码应该用 Tab 键行为中断,我无法使用 Tab 键跳转到表单中的下一个字段。

2 个答案:

答案 0 :(得分:7)

请参阅http://jsfiddle.net/8ZJZD/1/

var el=document.getElementById('cnfMobileNo');
el.onkeydown=function onlyNumbers(evt) {
    var theEvent = evt || window.event;
    var key = theEvent.keyCode || theEvent.which;
    if(key===8){return;}
    key = String.fromCharCode(key);
    var regex = /[0-9]|\./;
    if( !regex.test(key) ) {
        theEvent.returnValue = false;
        if(theEvent.preventDefault) theEvent.preventDefault();
    }
}

只需使用if(key===8){return;}

即可

修改

如果要排除更多密钥,请使用

var el=document.getElementById('cnfMobileNo');
el.onkeydown=function onlyNumbers(evt) {
    var theEvent = evt || window.event,
        key = theEvent.keyCode || theEvent.which,
        exclusions=[8,9]; /*Add exceptions here */
    if(exclusions.indexOf(key)>-1){return;}
    key = String.fromCharCode(key);
    var regex = /[0-9]|\./;
    if( !regex.test(key) ) {
        theEvent.returnValue = false;
        if(theEvent.preventDefault) theEvent.preventDefault();
    }
}

请在此处查看:http://jsfiddle.net/8ZJZD/2/

您可以使用keyCode

了解每个密钥的alert(key)

key = String.fromCharCode(key)之前)。

您也可以排除

  • 方向键:37,38,39,40
  • 输入:13
  • 上下文菜单:93
  • 开始结束:36,35

答案 1 :(得分:0)

我不确定退格正则表达式,但这也应该有用

$("#myInput").bind('keyup', function(){
     val1 = $(this).val();
     $(this).val(val1.replace(/[^0-9.]/g,''));
});

您可以取消使用bind并直接附加keyup

小提琴 - jsfiddle