Search code examples
javascriptjquerykeypress

jQuery: trigger keypress function on entire document but not inside inputs and textareas?


I have this …

$(document).keypress(function(e) {
        if ( e.keyCode === 119 ) // w
            doSomething();
    });

Wo when pressing "w" on my document the doSomething() function fires. How can I prevent it from firing when I'm currently typing (in focus) in an input field or textarea?


Solution

  • You'll have to filter out the elements after the event and not in the selector, like this

    $(document).on('keypress', function(e) {
        var tag = e.target.tagName.toLowerCase();
        if ( e.which === 119 && tag != 'input' && tag != 'textarea') 
            doSomething();
    });
    

    this checks the tagname of the event.target, the element the event originated from, and only fires the function if the event did not originate from an input or textarea.