event.preventDefault在keydown上的Firefox中表现得很奇怪

时间:2013-06-20 16:43:39

标签: javascript jquery firefox preventdefault

以下代码可有效防止浏览器默认在Chrome和Safari中触发。但是,出于某种原因,即使按下Firefox中的箭头键,我的代码也不会触发。

$(window).keydown(function(e) {
    switch(e.which){
        case 39: //right arrow key
            e.preventDefault();
            $('body').scrollLeft(scrollNow + z(10));
            break;
        case 37: // left arrow key
            e.preventDefault();
            $('body').scrollLeft(scrollNow - z(10));
            break;
    }
});

我也尝试了return false;而不是e.preventDefault();,但没有效果。我也尝试将e.preventDefault();放在scrollLeft行之后,但它也没有用。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

试试这个 -

code = e.keyCode || e.which;
switch(code){

答案 1 :(得分:2)

试试这个:

$(window).keydown(function(e) {
    switch(e.keyCode){
        case 39: //right arrow key
            e.preventDefault();
            $('body').scrollLeft(scrollNow + z(10));
            break;
        case 37: // left arrow key
            e.preventDefault();
            $('body').scrollLeft(scrollNow - z(10));
            break;
    }
});

答案 2 :(得分:1)

我刚才遇到过这个问题。我为select输入的keydown事件添加了一个事件监听器,以禁止左/右键分别遍历顶部/右侧选项。它在Chrome和IE中完美运行。根据我所读到的内容,到目前为止,它肯定是一个bug,对于是否真的将其视为一个错误进行了大量的辩论和猜测。我甚至将上一个事件监听器附加到前面提到的选择输入中用于键盘;在keydown事件(Firefox)中调用preventDefault后,我注意到它也在触发。但是,不会阻止该操作。非常讨厌。

仍在尝试确定解决方法。

答案 3 :(得分:0)

试试这个,

<强>更新

$(window).keydown(function(e) {
    var code = (e.keyCode ? e.keyCode : e.which);
    switch(code){
        case 39: //right arrow key
            e.preventDefault();
            $('body').scrollLeft(scrollNow + z(10));
            break;
        case 37: // left arrow key
            e.preventDefault();
            $('body').scrollLeft(scrollNow - z(10));
            break;
    }
});