Отменить привязку специального события нажатия клавиши - PullRequest
12 голосов
/ 21 сентября 2011

У меня вопрос по поводу событий нажатия клавиш jQuery. У меня есть следующий (рабочий) код:

$(document).bind('keypress', function(event) {

    if ($('#myDiv').is(':visible')) {

        if (event.which == 102) {
            // ...do something...
        }

    }
    else {
        if (event.which == 102) {
            return;
        }
    }

});

Я всегда «отменяю» событие, связывая другое «поверх» него. Я знаю, что могу отменить привязку с помощью .unbind('keypress'), но я получил больше событий нажатия клавиш, и когда я открепил это с помощью $(document).unbind('keypress'), все мои события теряются.

Могу ли я сделать что-то вроде "keypress.102", чтобы открепить только этот конкретный "ключ", или как это можно сделать?!

Ответы [ 2 ]

29 голосов
/ 21 сентября 2011

Вы были на правильном пути. Это называется событиями пространства имен , т. Е. Маркировка конкретных привязок с помощью <event_name>.<namespace> (в вашем случае "keypress.102")

Например:

$(document).bind("keypress.key102", function(event) {
    if ($('#myDiv').is(':visible')) {

        if (event.which == 102) {
            // ...do something...
        }

    }
    else {
        if (event.which == 102) {
            return;
        }
    }
});

позже вы можете отменить привязку, не затрагивая другие связанные события нажатия клавиш:

$(document).unbind("keypress.key102");
1 голос
/ 21 сентября 2011

Использовать событие в пространстве имен.

http://docs.jquery.com/Namespaced_Events

...