2

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

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 以不阻止退格键作用于文本字段的方法吗?

可能我猜,为退格字符添加正则表达式就可以了。有谁知道,如何添加正则表达式以匹配backspace

编辑:

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

4

2 回答 2

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
  • Enter: 13
  • 上下文菜单:93
  • StartEnd: 36,35
于 2012-09-02T14:56:04.683 回答
0

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

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

您可能会取消绑定并直接附加 keyup

小提琴 - jsfiddle

于 2012-09-02T14:57:38.783 回答