2013-02-28 14 views
7

Wywołuję funkcję (poniżej), która wykona akcję, jeśli użytkownik naciśnie przycisk usuwania. Działa dobrze, ale muszę to zrobić tylko na stronie, a nie wtedy, gdy użytkownik pisze (wewnątrz danych wejściowych lub wewnątrz pola tekstowego).jQuery keydown, ale zignoruj, jeśli w polu tekstowym

$(window).keydown(function (evt) { 
    if (evt.which == 46) { // delete 
     goDoSomething(); 
    } 
}); 

Wszelkie pomysły how I can amend the above do not fire jeśli użytkownik jest ininput lub textarea?

Dzięki z góry,

Dave typ

Odpowiedz

14

czeku evt.target za:

$(window).keydown(function (evt) { 
    if (evt.target.tagName.toLowerCase() !== 'input' && 
     evt.target.tagName.toLowerCase() !== 'textarea' && evt.which == 46) { // delete 
     goDoSomething(); 
    } 
}); 
+0

Działa dobrze, dziękuję za szybką odpowiedź. Oznaczona jako odpowiedź – dhardy

+0

@dhardy Cieszę się, że pomogło – karaxuna

0

Można mieć zmienną globalną i ustawić go do czegoś, gdy koncentruje się na pole tekstowe i zresetować go w rozmycie. Coś takiego:

var textboxSelected = false; 

$(":input").focus(function() { 
    textboxSelected = true; 
}); 
$(":input").blur(function() { 
    textboxSelected = false; 
}); 

Następnie w onKeyDown razie sprawdzić, czy zmienna jest ustawiona na false przed przeprowadzeniem resztę funkcjonalność:

$(window).keydown(function (evt) { 
if (evt.which == 46 && textboxSelected == false) { 

    goDoSomething(); 
} 
}); 
0

try sometihing tak:

$(window).keydown(function (evt) { 
    if(evt.target != $('input') && evt.target != $('textarea')){ 
    if (evt.which == 46) { // delete 
     goDoSomething(); 
    } 
    } 
}); 
Powiązane problemy