как включить по умолчанию после выполнения event.preventDefault () - PullRequest
7 голосов
/ 09 апреля 2010

Я знаю, что этот точный вопрос был задан здесь , но ответ не сработал для того, что мне нужно было сделать, поэтому я решил дать пример кода и объяснить немного ...

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

не позволяет снова включить функцию по умолчанию ... Мне нужно, чтобы она прокручивала страницу без необходимости создавать для нее функцию прокрутки ...

Есть идеи?

Спасибо,
Matt

Ответы [ 5 ]

5 голосов
/ 09 апреля 2010

Добавление нового обработчика не заменяет предыдущий, а добавляет новый. Возможно, вы ищете jQuery#unbind, если вы пытаетесь удалить предыдущий обработчик, но если вы собираетесь многократно включать и выключать его, вам, вероятно, будет лучше с флагом сообщая вам, следует ли предотвратить использование по умолчанию или нет в существующем обработчике.

Добавление и последующее удаление обработчика выглядит следующим образом:

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

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

// ...elsewhere...
$('#thingy').unbind('keypress', keypressHandler);
3 голосов
/ 09 апреля 2010

Я не уверен, что это правильный способ справиться с этим.

Лучшим способом решения этой проблемы было бы поставить какую-то проверку в инструкции 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();
        }
     }
 );

Затем управляйте ключами включения везде, где вы считаете нужным, либо при наведении курсора, либо в том же духе.

1 голос
/ 19 ноября 2011
function(e){ e.preventDefault(); }

и его противоположность

function(e){ return true; }
0 голосов
/ 09 апреля 2010

Попробуйте отменить привязку события нажатия клавиши из документа.

Я не знаю других способов сделать это.

НТН

0 голосов
/ 09 апреля 2010

Почему бы просто не обернуть условие вокруг event.preventDefault(); в вашем текущем коде?

...