允许某些键通过数字文本框按键,键盘事件

时间:2011-06-10 07:19:56

标签: javascript javascript-events asp.net-ajax textbox keypress

这是我的代码,它使用asp.net ajax客户端库来添加事件处理程序

function IsDigit(id) { //short variable,args name for best minification
    if ($get(id)) {
        var v = function (e) {
                var r = /\d/;
                if (!r.test(String.fromCharCode(e.keyCode))) e.preventDefault();
            }
        $addHandlers($get(id), {
            keydown: v
        });
    }
}

$get(ID)获取带有id的控件 $addHandlers将事件处理程序添加到控件中。在这里,我将其附加到ID为id的控件。一切正常,文本框只接受数字输入,但问题是当他想要删除所有数字并想要输入其他一些数字时。所以类似[SHFT + HOME]然后删除,[删除]不起作用。请有人可以更好地完善代码。 Keydown也是这类工作的最佳选择 我通过这样做暂时解决了这个问题,但这确实允许短暂的意外字符然后将其删除

function IsDigit(id) { //short variable,args name for best minification
    if ($get(id)) {
        var p = "";
        var v = function (e) {
                var r = /^\d*$/;
                if (r.test(this.value)){p = this.value;} else {this.value=p;}// e.preventDefault();
            }
        $addHandlers($get(id), {
            keyup: v
        });
    }
}

1 个答案:

答案 0 :(得分:0)

您可能会发现验证onkeydown更容易,而不是尝试进行验证onkeyup / onblur。这样您就不必担心有人可能会用来选择/删除/重新键入文本的各种组合键,例如ctrl +箭头键,ctrl + v用于粘贴文本,ctrl + a用于选择全部。

您始终可以使用新的HTML5 <input type="number">来约束输入,然后使用Modernizr为不支持新输入类型的浏览器添加事件处理程序代码:

if (Modernizr.inputtypes.number) {
    ...
    // Add your code in here
    ...
}