文本输入:将输入限制为数字(0-9)和减号(-)。无法正常工作

问题描述 投票:2回答:3

我试图将文本字段中的键盘输入限制为仅数字[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>
javascript html
3个回答
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 Fiddle demo

您的原始代码失败的原因很简单,就是您可以在评估if条件之前从函数中返回。在此版本中,如果按下-键,则三元返回,如果没有当前值(那么true将是第一个字符),则返回-;如果已经有一个值,则返回false(因此, -将不是第一个字符。


1
投票

操作顺序,在您询问减号之前,您在0-9上返回false。如果将块减号移动到0-9(如果块且您是黄金)的上方]

<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>

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.