Mam to …

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

Wo po naciśnięciu "W" na moim dokumencie doSomething() funkcja pożaru. Jak mogę zapobiec przed strzelaniu, gdy aktualnie wpisuję (w fokusie) w polu input lub textarea?

48
matt 4 sierpień 2012, 14:39

4 odpowiedzi

Najlepsza odpowiedź

Będziesz musiał odfiltrować elementy po zdarzeniu, a nie w selektorze, w ten sposób

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

To sprawdza zmienną nazwę {{x0}, elementu, z którego pochodzi zdarzenie, a tylko pożaruje funkcję, jeśli zdarzenie nie pochodzi z wejścia lub textlai.

85
adeneo 29 lipiec 2014, 01:11

Jeśli obsługa zdarzeń jest związana z document, wydarzenie zostało już podniesione na elemencie wejściowym i bulgotał do elementu HTML, więc będziesz musiał obsługiwać wykluczenie w kodzie dla samego przewodnika. Alternatywą jest specyficznie wiązania drugiego przewodnika elementów wejściowych, które zapobiega bulgoczeniu, ale prawdopodobnie nie jest to właściwe podejście.

Demo kodu

$(function() {
    $(document).keypress(function(e) {
        if ($(e.target).is('input, textarea')) {
            return;   
        }
        if (e.which === 119) doSomething();
    });
});​

Str.s. Możesz spojrzeć na Dokumentacja obiektów zdarzeń jQuery, aby zobaczyć, jakie właściwości narażony.

13
nbrooks 4 sierpień 2012, 11:10

W jQuery e.which jest znormalizowaną nieruchomością, a nie {x1}}.

Aby sprawdzić, czy nie jesteś w wejściu, możesz sprawdzić document.activeElement:

$(document).keypress(function(e) {
    if (e.which === 119 && !$(document.activeElement).is(":input,[contenteditable]")) {
        doSomething();
    }
});

Próbny. http://jsfiddle.net/pxcs2/1/

6
Esailija 4 sierpień 2012, 11:26

Najprostszym i doskonałym rozwiązaniem jest:

$(document).keypress(function(e) {
    if (e.which == 119 && !$(':focus').length) {
        doSomething();
    }
});
2
Buzogany Laszlo 14 marzec 2013, 13:04