开发者

Allowing certains keys through a numeric textbox's keypress, keyup event

开发者 https://www.devze.com 2023-03-12 03:03 出处:网络
Here\'s my code and it uses asp.net ajax client library to add event handlers function IsDigit(id) { //short variable,args name for best minification

Here's my code and it uses asp.net ajax client library to add event handlers

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) gets the control with the id $addHandlers adds event Handlers to the control. Here i attach it to the control with ID id. It all works well the textbox accepts only numeric input, but the problem is when he wants to delete all numeric and wants to enter some other numbers. So something like SHFT + HOME and then delete, Delete are not working. Please can someone refine the code better. Also is Keydown optimal for th开发者_开发百科is kind of job I temporarily solved it by doing this, but this does allow unexpected characters for brief second then removes it

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
        });
    }
}


Rather than trying to do your validation onkeydown / onkeyup you might find it easier to validate onblur. That way you don't have to worry about the various key combinations that someone might use to select / delete / re-type text e.g. ctrl + arrow keys, ctrl + v for pasting text, ctrl + a to select all.

You could always use the new HTML5 <input type="number"> to constrain the input, then use Modernizr to add your event handler code for browsers that don't support the new input type:

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

精彩评论

暂无评论...
验证码 换一张
取 消