如何在执行event.preventDefault()后重新启用默认值

时间:2010-04-09 15:33:02

标签: javascript jquery event-handling events

我知道这个确切的问题被问到here,但答案对我需要做的事情不起作用所以我想我会给出一些示例代码并解释一下......

$(document).keypress(
    function (event) {
        // Pressing Up or Right: Advance to next video
        if (event.keyCode == 40 || event.keyCode == 39) {
            event.preventDefault();
            $(".current").next().click();
        }
        // Pressing Down or Left: Back to previous video
        else if (event.keyCode == 38 || event.keyCode == 37) {
            event.preventDefault();
            $(".current").prev().click();
        }
     }
 );

它基本上禁用了箭头键以将其用于其他内容,但这样做:

$(document).keypress(function () { });

没有再次启用默认功能...我需要它来滚动页面而不必为它创建滚动功能......

有什么想法吗?

谢谢,
马特

5 个答案:

答案 0 :(得分:5)

添加新处理程序不会替换前一个处理程序,而是添加一个新处理程序。你可能正在寻找jQuery#unbind,如果你想要删除以前的处理程序,但是如果你要打开和关闭很多,你可能会更好地用一个标志告诉你是否要防止现有处理程序中的默认值。

添加并稍后删除处理程序如下所示:

function keypressHandler() { /* ... */};

$('#thingy').keypress(keypressHandler);

// ...elsewhere...
$('#thingy').unbind('keypress', keypressHandler);

答案 1 :(得分:3)

我不确定这是处理它的正确方法。

解决这个问题的一个更好的方法是在你的document.keypress说明中加入某种检查..比如..

var enableKeys = false;

$(document).keypress(
    function (event) {
        // Pressing Up or Right: Advance to next video
        if (event.keyCode == 40 || event.keyCode == 39 && enableKeys) {
            event.preventDefault();

            $(".current").next().click();
        }
        // Pressing Down or Left: Back to previous video
        else if (event.keyCode == 38 || event.keyCode == 37 && enableKeys) {
            event.preventDefault();
            $(".current").prev().click();
        }
     }
 );

然后在任何需要的地方控制enablekeys,无论是悬停还是沿着这些线。

答案 2 :(得分:1)

function(e){ e.preventDefault(); }

及其相反的

function(e){ return true; }

答案 3 :(得分:0)

为什么不在当前代码中包裹event.preventDefault();条件?

答案 4 :(得分:0)

尝试unbind来自文档的按键事件。

我不知道有任何其他方法可以做到。

HTH