Q:

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

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

A:

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

