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

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

$(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 () { }); 

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

有任何想法吗?

谢谢,
马特

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

解决这个问题的一个更好的方法是在你的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,无论是hover还是沿着这些线。

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

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

 function keypressHandler() { /* ... */}; $('#thingy').keypress(keypressHandler); // ...elsewhere... $('#thingy').unbind('keypress', keypressHandler); 
 function(e){ e.preventDefault(); } 

和它的对立面

 function(e){ return true; } 

为什么不在event.preventDefault();周围包装一个条件event.preventDefault(); 在你当前的代码?

尝试从文档中取消绑定按键事件。

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

HTH