13

I've got a question regarding jQuery keypress events. I've got the following (working) code:

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

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

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

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

});

I always "unbind" the event with binding another "over" it. I know that I can unbind it with .unbind('keypress') but I got more keypress events and when i unbind this with $(document).unbind('keypress') all my events get lost.

Can I do something like "keypress.102" to only unbind this particular "key" or how can this be done?!

Shawn Chin
  • 84,080
  • 19
  • 162
  • 191
Mikaelik
  • 355
  • 3
  • 4
  • 12

2 Answers2

30

You were on the right track. That's called namespaced events, i.e. labelling specific bindings using <event_name>.<namespace> (in your case, "keypress.102").

For example:

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

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

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

you can later unbind that without affecting other bound keypress events:

$(document).unbind("keypress.key102");
Shawn Chin
  • 84,080
  • 19
  • 162
  • 191
1

Use a namespaced event.

http://docs.jquery.com/Namespaced_Events

BNL
  • 7,085
  • 4
  • 27
  • 32