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

Mat*_*att 7 javascript jquery events event-handling

我知道这个确切的问题是问在这里,但我需要做的,所以我想我会给出一些示例代码,并解释了一下,答案并没有为工作...

$(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();
        }
     }
 );
Run Code Online (Sandbox Code Playgroud)

它基本上禁用箭头键将它们用于其他东西,但是:

$(document).keypress(function () { });
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

谢谢,
马特

T.J*_*der 5

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

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

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

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

// ...elsewhere...
$('#thingy').unbind('keypress', keypressHandler);
Run Code Online (Sandbox Code Playgroud)


dmp*_*dmp 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();
        }
     }
 );
Run Code Online (Sandbox Code Playgroud)

然后在您认为必要的地方控制启用键,无论是通过悬停还是类似的操作。