2013-01-21 2 views
5

Ho uno script jquery che visualizza un div quando viene premuto un tasto qualsiasi sulla tastiera. Vorrei aggiungere una condizione allo script che eseguirà lo script solo se nessun'altra area di input (textarea o texfields) è a fuoco sulla pagina. In questo modo puoi effettivamente scrivere sul resto della pagina senza mostrare il div.Controllare se sono presenti elementi di input a fuoco

$(document).on('keydown', function (e) { 
    if (!$('#test').is(':visible')) { 
     //######## IF (every input is not active....) { 
     if (65 <= e.keyCode && e.keyCode <= 90) { 
      $(elem).fadeIn(); 
      $('#textarea').val(''); 
      $('#textarea').focus(); 
      $('#textarea').val(temp); 
     } 
    } 
}); 

Grazie. Posso dare a ogni altra textarea sulla pagina lo stesso ID se è necessario.

+0

BTW non si può "dare lo stesso ID" - gli ID duplicati non sono validi HTML e la vostra JS/jQuery catturerà solo il primo elemento. –

risposta

13

di utilizzare jQuery focus pseudoselector

if ($('input:focus').length > 0) { return; } 

o per il vostro esempio di codice

if ($('input:focus').length == 0) { ... } 
+0

@ FabrícioMatté - Sì, d'accordo. Ma penso che per i nuovi sviluppatori indichi esplicitamente cosa sta succedendo. Grazie per aver corretto i miei errori di codice. – mrtsherman

+0

Nessun problema, ho appena aggiunto una nota a margine - Personalmente preferisco le condizioni più brevi 'if ($ ('input: focus'). Length)' e 'if (! $ ('Input: focus'). Length)' che richiedono meno caratteri da digitare e leggere, inoltre tutti gli sviluppatori devono imparare come gestire i valori di verità e falsi a un certo punto. Ma sì, è per lo più solo una preferenza personale. '=]' –

+0

Questo ha funzionato meravigliosamente. Grazie mille. Avevo paura di dover specificare ogni campo di testo sulla pagina che sarebbe davvero ridondante. Grazie ancora. – centree

3

con jQuery, tutto quello che dovete fare è cercare elementi di input o textarea che sono attualmente a fuoco.

if ($('input:focus, textarea:focus').length === 0) { 
    // put some code here... 
} 
5

È possibile utilizzare di .is() e document.activeElement come questo jQuery.

var targetInput = $('#myInput'); 

if(!targetInput.is(document.activeElement)) { 
    alert('Typed while not focused on #myInput!'); 
} 

JSFiddle

+0

+1 ma ricorda che [questo è solo HTML5] (https://developer.mozilla.org/en-US/docs/DOM/document.activeElement). –

+1

@JosephSilber cosa? Dice supporto IE4. * confuso * –

+0

@ FabrícioMatté - Anch'io. ** Questo attributo fa parte della specifica HTML 5 in fase di sviluppo. ** –

1

vorrei raccomandare di utilizzare questo per eventuali ingressi forma

if ($(':input:focus').length) { ... }