2013-02-28 6 views
7

Sto chiamando una funzione (in basso) che eseguirà un'azione se l'utente preme il pulsante Elimina. Funziona bene ma ho bisogno di farlo solo sulla pagina e non quando un utente sta digitando (all'interno di un input o all'interno di una textarea).jQuery keydown ma ignora se nella casella di testo

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

Tutte le idee how I can amend the above al not fire se l'utente è un ininput o textarea?

Grazie in anticipo,

Dave tipo

risposta

14

assegno evt.target:

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

Funziona bene, grazie per la rapida risposta. Contrassegnato come risposta – dhardy

+0

@dhardy Sono contento che sia stato d'aiuto – karaxuna

0

si potrebbe avere una variabile globale e impostarlo su qualcosa quando una casella di testo si concentra su e resettarlo sfocato. Qualcosa di simile a questo:

var textboxSelected = false; 

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

Poi, nel vostro evento onKeyDown verificare se la variabile è impostata su false prima di effettuare il resto della funzionalità:

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

    goDoSomething(); 
} 
}); 
0

prova sometihing come questo:

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