2011-01-01 3 views

risposta

15

Dal momento che avete trovato document.activeElement, è possibile controllare la sua nodeName.

if (document.activeElement.nodeName == 'TEXTAREA' || document.activeElement.nodeName == 'INPUT') { 
    // .... 
} 

Qualcosa del genere.

+0

Grazie, ma come faccio a ottenere l'oggetto jQuery da document.activeElement? –

+1

$ (document.activeElement) –

+0

Questo non controlla la presenza di HTMLDivElement modificabili. Vedi la mia risposta qui sotto. –

2
$('#yourTextAreaID:focus'); 

non funzionava. :) Ma

$('#yourTextAreaID').focus(function(){ 
    // do something 
}); 

sarebbe eseguirli il codice //do something quando l'elemento viene attivato.

+0

Ok, ma in un dato momento (non neccesarily quando l'utente fa clic una casella di testo) come io controllerei se qualche casella di testo ha il focus? –

+0

Dato che all'OP non interessa "quale sia", suggerirei di modificare il selettore in: '$ ('textarea: focus, input: text: focus') ...' –

+0

Ho appena trovato il documento. activeElement. Come dovrei controllare se si tratta di una casella di testo o di una textarea? –

1
$('#target').focus(function() { 
    alert('Handler for .focus() called.'); 
}); 

Prova anche:

alert($("*:focus").attr("id")); 

http://jsfiddle.net/4KVvV/

+0

come @lonesome sottolineato sopra,: hover non è un vero selettore jquery. Pensavo lo fosse anche a me, ma quando ho controllato la documentazione, non sono riuscito a trovarla menzionata. – JakeParis

6

Ok, ho appena capito. Ecco quello che ho fatto:

function checkFocus() { 

    if ($(document.activeElement).attr("type") == "text" || $(document.activeElement).attr("type") == "textarea") { 

    //Something's selected 

    return true; 

} 

} 
+0

Qualcuno segna questo come risposta, dice che devo aspettare 2 giorni. :) –

+2

sei l'unico che * può * contrassegnarlo come risposta. Inoltre, consulta la [Guida in linea Markdown overflow dello stack] (http://stackoverflow.com/editing-help/), per indicazioni su come formattare le risposte, in particolare i campioni di codice. –

+0

Nota che questo funzionerà su tutti i browser moderni, ma * non * funzionerà su molti browser obsoleti. Dai un'occhiata a [questa risposta] (http://stackoverflow.com/questions/1009777/determining-which-element-has-focus/1009787#1009787) per una tecnica per superare questo. – lonesomeday

2

Estendere la risposta accettata da un assegno di HTMLDivElements modificabili:

if (document.activeElement.nodeName == 'TEXTAREA' 
    || document.activeElement.nodeName == 'INPUT' 
    || (document.activeElement.nodeName == 'DIV' 
     && document.activeElement.isContentEditable)) { 
    // … 
}