how to re-enable default after doing event.preventDefault()

浪子不回头ぞ 提交于 2019-12-09 17:31:35

问题


I know this exact question was asked here, but the answer didn't work for what I needed to do so I figured I'd give some example code and explain a bit...

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

It basically disables the arrow keys to use them for something else, but doing:

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

doesn't enable the default function again... I need it to scroll the page without having to create a scroll function for it...

Any ideas?

Thanks,
Matt


回答1:


I'm not sure this is the right way to handle it.

A better way to approach this problem would be to put some kind of check inside your document.keypress instructions.. like..

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

Then control the enablekeys wherever you feel necessary, either with a hover, or something along those lines.




回答2:


Adding a new handler doesn't replace the previous one, it adds a new one. You may be looking for jQuery#unbind if you're trying to remove the previous handler, but if you're going to be turning this on and off a lot, you probably would be better off with a flag telling you whether to prevent the default or not in your existing handler.

Adding, and later removing, a handler looks like this:

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

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

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



回答3:


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

and its opposite

function(e){ return true; }



回答4:


Why not just wrap a condition around event.preventDefault(); in your current code?




回答5:


Try to unbind the keypress event from document.

I don't know of any other ways to do it.

HTH



来源:https://stackoverflow.com/questions/2608714/how-to-re-enable-default-after-doing-event-preventdefault

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!