为什么e.preventDefault()和return false在keydown事件上不起作用?

时间:2013-05-24 05:41:02

标签: html

我只想在键入除数字

之外的键时取消keydown事件

为此,我做了以下事情:

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);" />

但它不起作用,我该如何解决这个问题呢? 我不知道为什么e.preventDefault()在任何浏览器中都不起作用。

2 个答案:

答案 0 :(得分:2)

事件未定义,您可以像这样传递

<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

答案 1 :(得分:1)

如果按下的键不是数字,这是一个返回false的代码。

使用keypress event代替keydown

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