2

我试图将我的文本字段中的键盘输入限制为数字[0-9]和减号-(没有复制/粘贴等)和删除键显然。

该代码适用于限制数字和删除键,但不适用于减号-部分。

用户应该只能-在他们的数字前面输入一个减号,如果他们尝试输入,1那么-它不应该输入,-但现在该-部分根本不起作用。

小提琴:http: //jsfiddle.net/7XLqQ/1/

我认为这段代码是问题所在,但看起来不错。它检查文本输入是否为空白,如果是,则输入减号-

// Only enter the minus sign (-) if the user enters it first
if (unicode == 45 && input.value == "") {
    return true;
}

我的完整代码:

<input type="text" maxlength="10" id="myInput">

<script>
var input = document.getElementById("myInput");

input.onkeypress = function(e) {
   var unicode = e.keyCode;

    if (unicode == 49 || unicode == 50 || unicode == 51 || unicode == 52 || unicode == 53 || unicode == 54 || unicode == 55 || unicode == 56 || unicode == 57 || unicode == 48) {
        return true;
    } else {
        return false;   
    }

    // Only enter the minus sign (-) if the user enters it first
    if (unicode == 45 && input.value == "") {
        return true;
    }
};
</script>
4

4 回答 4

1

操作顺序,在您询问减号之前,您在 0-9 上返回 false。将减号 if block 移到 0-9 if block 之上,你是金子

<input type="text" maxlength="10" id="myInput">

<script>
var input = document.getElementById("myInput");

input.onkeypress = function(e) {
   var unicode = e.keyCode;

    // Only enter the minus sign (-) if the user enters it first
    if (unicode == 45 && input.value == "") {
        return true;
    }

    if (unicode == 49 || unicode == 50 || unicode == 51 || unicode == 52 || unicode == 53 || unicode == 54 || unicode == 55 || unicode == 56 || unicode == 57 || unicode == 48) {
        return true;
    } else {
        return false;   
    }


};
</script>
于 2013-02-21T23:19:40.040 回答
1

我建议:

var input = document.getElementById("myInput");

input.onkeypress = function(e) {
    switch (e.keyCode){
        case 45:
            return this.value.length == 0 ? true : false;
            break;
        case 48:
        case 49:
        case 50:
        case 51:
        case 52:
        case 53:
        case 54:
        case 55:
        case 56:
        case 57:
            return true;
            break;
        default:
            return false;
            break;
    }
};

JS 小提琴演示

您的原始代码失败的原因仅仅是您在if评估条件之前已经从函数返回。在这个版本中,如果-按键被按下,true如果没有当前值(因此-将是第一个字符),或者false如果已经有一个值(因此-不会是第一个字符),则返回一个三元组。

于 2013-02-21T23:22:02.553 回答
1

keyCode是除 IE 之外的所有浏览器中的错误属性。您需要charCodewhich在其他浏览器中。使用它,您将获得字符代码,并且可以使用正则表达式来测试键入的字符。keypress您还需要在为此类键触发事件的浏览器中允许不可打印的按键,例如删除、退格和箭头键。

演示:http: //jsfiddle.net/7XLqQ/3/

var input = document.getElementById("myInput");

input.onkeypress = function(e) {
    e = e || window.event;
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode;

    // Allow non-printable keys
    if (!charCode || charCode == 8 /* Backspace */ ) {
        return;
    }

    var typedChar = String.fromCharCode(charCode);

    // Allow numeric characters
    if (/\d/.test(typedChar)) {
        return;
    }

    // Allow the minus sign (-) if the user enters it first
    if (typedChar == "-" && this.value == "") {
        return;
    }

    // In all other cases, suppress the event
    return false;
};

这里没有考虑一种情况,即用户将插入符号放在输入的开头并键入减号。为此,您需要检测插入符号的位置。这是一些跨浏​​览器代码,用于检测插入符号是否位于输入的开头,改编自此答案

function isCaretAtTheStart(el) {
    if (typeof el.selectionEnd == "number") {
        // Modern browsers
        return el.selectionEnd == 0;
    } else if (document.selection) {
        // IE < 9
        var selRange = document.selection.createRange();
        if (selRange && selRange.parentElement() == el) {
            // Create a working TextRange that lives only in the input
            var range = el.createTextRange();
            range.moveToBookmark(selRange.getBookmark());
            return range.moveEnd("character", -el.value.length) == 0;
        }
    }
    return false;
}

这是一个修改后的演示:http: //jsfiddle.net/7XLqQ/5/

最后,我最喜欢的关于 JavaScript 关键事件的资源,它将告诉你你需要知道的一切:http: //unixpapa.com/js/key.html

于 2013-02-22T00:04:19.593 回答
0

我建议:

$(".class_name").keypress(function (e) {
   if (e.which != 8 && e.which != 0 && e.which != 45 && (e.which < 48 || e.which > 57)) {
      return false;
   }
});
于 2021-06-30T14:24:49.640 回答