Scalalang2
Scalalang2

Reputation: 546

Why does e.preventDefault() and return false not work on keydown event?

I just want to cancel the keydown event when I type the key except a number,

for this, I did the following :

function handleNum(obj){
    var e = window.event;
    var flag = true;

    if( ( e.keyCode >=  48 && e.keyCode <=  57 ) ||          
            ( e.keyCode >=  96 && e.keyCode <= 105 ) ||   
        e.keyCode ==   8 ||  
        e.keyCode ==  46 ||  
        //e.keyCode == 110 ||
        //e.keyCode == 190 ||
        e.keyCode ==  37 ||  
        e.keyCode ==  39 ||  
        e.keyCode ==  35 ||  
        e.keyCode ==  36 ||  
        e.keyCode ==   9     
    ) {
        flag = true;
    } else { 
        alert('You can type only a number!');
        console.log("doesn't return?");
                    e.preventDefault();
        flag = false;
    }
    console.log(flag);
    return flag;
}

html :

   <input type="text" onkeydown="return handleNum(this);" />

but It doesn't work, how can I solve this problems? I have no idea why e.preventDefault() don't work in any browser.

Upvotes: 0

Views: 1196

Answers (2)

rahul sharma
rahul sharma

Reputation: 56

Here is a code that will return false if the key pressed is not a number.

Use the keypress event instead of keydown.

$(fieldid).keypress(function(e) {
    if (e.which != 8 && e.which != 0 && (e.which<48 || e.which>57)) {
        return false;
    }
});

Upvotes: 1

Hanky Panky
Hanky Panky

Reputation: 46900

Event is undefined, You can pass it like this

<script>
function handleNum(e,obj){
    if (!e) var e = window.event;

    var flag = true;

    if( ( e.keyCode >=  48 && e.keyCode <=  57 ) ||          
            ( e.keyCode >=  96 && e.keyCode <= 105 ) ||   
        e.keyCode ==   8 ||  
        e.keyCode ==  46 ||  
        //e.keyCode == 110 ||
        //e.keyCode == 190 ||
        e.keyCode ==  37 ||  
        e.keyCode ==  39 ||  
        e.keyCode ==  35 ||  
        e.keyCode ==  36 ||  
        e.keyCode ==   9     
    ) {
        flag = true;
    } else { 
        alert('You can type only a number!');
        console.log("doesn't return?");
        e.preventDefault();
        flag = false;
        obj.value = obj.value.replace(/\D/g, '');
    }
    console.log(flag);
    return flag;
}
</script>

<input type="text" onKeyDown="return handleNum(event,this);" />

Fiddle

Upvotes: 2

Related Questions