isNumberKey() 不工作

isNumberKey() not working

很久以前,如果发现一些代码(在此站点上)阻止用户将字母输入文本框,并且它起作用了。自从找到这段代码后,我对其进行了更改和添加,但现在它不起作用了。这是我的代码:

var count = 1

function isNumberKey(event) {
var keyCode = window.event ? event.keyCode : event.which;

if (event.keyCode === 8 // backspace
|| event.keyCode === 46 // delete
|| event.keyCode === 13 // enter key
|| event.keyCode === 9 // tab
|| event.keyCode === 116 // F5 (refresh)
|| event.keyCode === 112 // F1
|| event.keyCode === 113 //F2
|| event.keyCode === 114 //F3
|| event.keyCode === 115 //F4
|| event.keyCode === 117 //F6
|| event.keyCode === 118 //F7
|| event.keyCode === 119 //F8
|| event.keyCode === 120 //F9
|| event.keyCode === 121 //F10
|| event.keyCode === 122 //F11
|| event.keyCode === 123 //F12
) {
return true;
}
else if ( key < 48 || key > 57) {
if (count < 6) {
count++; //adds one to count
}
else {
alert("Please Only Enter Numerical Values");
count = 1;
}
return false;
}
else return true;
}

我并不是在声称我 made/wrote 这段代码,但有人能看出代码有什么问题吗?

应该这样做:

textBox.onkeypress = function(e) {
    e = e || window.event;
    var charCode = (typeof e.which == "undefined") ? e.keyCode : e.which;
    var charStr = String.fromCharCode(charCode);
    if (/\d/.test(charStr)) {
        return false;
    }
};

这行得通。它不起作用,因为您使用 key < 48 || key > 57 而不是 event.keyCode < 48 || event.keyCode > 57

var count = 1

function isNumberKey(event) {
    var keyCode = window.event ? event.keyCode : event.which;

    if (event.keyCode === 8 // backspace
        || event.keyCode === 46 // delete
        || event.keyCode === 13 // enter key
        || event.keyCode === 9 // tab
        || event.keyCode === 116 // F5 (refresh)
        || event.keyCode === 112 // F1
        || event.keyCode === 113 //F2
        || event.keyCode === 114 //F3
        || event.keyCode === 115 //F4
        || event.keyCode === 117 //F6
        || event.keyCode === 118 //F7
        || event.keyCode === 119 //F8
        || event.keyCode === 120 //F9
        || event.keyCode === 121 //F10
        || event.keyCode === 122 //F11
        || event.keyCode === 123 //F12
    ) {
        return true;
    }
    else if ( event.keyCode < 48 || event.keyCode > 57) {
        if (count < 6) {
            count++; //adds one to count
        }
        else {
            alert("Please Only Enter Numerical Values");
            count = 1;
        }
        return false;
    }
    else return true;
}

这是我问的时候出现的,所以可能值得在这里添加 keyCodecharCode 已被弃用,因为此时,接受的答案可能不是最好的。

添加检查或实现 isNumberKey 函数的更好方法可能是:

const isNumberKey = (event: KeyboardEvent) => 
   ((event.key.length > 1) || event.key.match(/^\d|-$/))

这样,我们检查是否允许特殊键发挥其功能,同时确保在按下单个字符键时只允许使用数字。