views:

15

answers:

1

I can use jQuery to bind a function to a keyup event within the context of an <input> element such that the event only fires when the <input> element is focused:

$('#my-input').keyup(function(e) {
  // only fires when the focus is on the <input> element
}

How do I bind a function to a keyup event outside the context of the input element? I want to be able to trigger a keyup event only when the <input> element is not focused:

$(':not(#my-input)').keyup(function(e) {
  // this code fires regardless of whether the input element is focused
}

Unfortunately, the function above is run regardless of whether the <input> box is focused.

+2  A: 
$('#my-input').focus(function(){
 $('body').unbind('keyup');
}).blur(function(){
 $('body').keyup(function(e) {
  //do stuff
 });
});
Mike Sherov
This worked, but since I had to respond to keyboard events both in and out of the input box I had to tweak it: $('input.lst').eq(0).focus(function(e) { $('body').unbind('keypress').keyup(function(e) { // keyup in <input> }); }).blur(function(){ $('body').unbind('keyup').keypress(function(e) { // keypress out of <input> }); });
aaronstacy