0

我有一个文本框,我在其中使用 jQuery 将输入限制为仅数字字符。我遇到的问题是,当 4 位代码以 0 开头时,它会在焦点输出或输入另一个数字时从文本框中删除。这是一个 mvc3 应用程序,数据类型是字符串。如何保持前导零不被删除?我的 jQuery 代码中有什么我没有注意到的吗?如果有多个前导零,例如“0025”,这也适用。

$('#selector').bind('keyup paste', function (e) {
if (checkArrowKeyEntry(e)) {
    var ob = $(this);
    if (e.type == 'paste') {
        setTimeout(function () {
            myFuncion(ob);
        }, 1);
    } else {
        myFuncion(ob);
    }
}
});

function myFuncion(ob) {
ob.val(numericInputOnly(ob.val()));
}

function checkArrowKeyEntry(e) {
isNotArrowKey = true;
if (e.keyCode == 37 || e.keyCode == 39) { //|| e.keyCode == 8 || e.keyCode == 46) {
    // leftarrow, rightarrow, delete, backspace
    isNotArrowKey = false;
}
return isNotArrowKey;
}

function numericInputOnly(inputvalue) {
if (!isNaN(parseInt(inputvalue, 10))) {
    inputvalue = parseInt(inputvalue, 10);
}
else {
    inputvalue = "";
}
inputvalue = inputvalue.toString().replace(/[^0-9]/g, '');
return inputvalue;
}
4

1 回答 1

3

我怀疑 numericInputOnly 函数有问题。

您正确地确保它始终输出一个字符串(这样前导 0 就不会被修剪掉),但是您过早地将 inputValue 转换为字符串。

您的代码中的错误在线:

inputvalue = parseInt(inputvalue, 10);

转换为 int 将“丢失”尾随的 0。

尝试例如

function numericInputOnly(inputvalue) {
    return inputvalue.replace(/[^0-9]/g, '');
}

这将只保留输入的数字(所有数字,包括前导 0),并且可能与您需要的相对应。

于 2012-12-13T23:36:18.483 回答