Come trovo se una casella di testo (o area di testo) è attualmente a fuoco? Non mi interessa sapere quale sia, ho solo bisogno di sapere se uno è a fuoco (ha il cursore in esso). Come farei questo con javascript e jquery?Trova se una casella di testo è attualmente selezionata
risposta
Dal momento che avete trovato document.activeElement
, è possibile controllare la sua nodeName.
if (document.activeElement.nodeName == 'TEXTAREA' || document.activeElement.nodeName == 'INPUT') {
// ....
}
Qualcosa del genere.
$('#yourTextAreaID:focus');
non funzionava. :) Ma
$('#yourTextAreaID').focus(function(){
// do something
});
sarebbe eseguirli il codice //do something
quando l'elemento viene attivato.
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? –
Dato che all'OP non interessa "quale sia", suggerirei di modificare il selettore in: '$ ('textarea: focus, input: text: focus') ...' –
Ho appena trovato il documento. activeElement. Come dovrei controllare se si tratta di una casella di testo o di una textarea? –
$('#target').focus(function() {
alert('Handler for .focus() called.');
});
Prova anche:
alert($("*:focus").attr("id"));
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
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;
}
}
Qualcuno segna questo come risposta, dice che devo aspettare 2 giorni. :) –
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. –
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
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)) {
// …
}
Grazie, ma come faccio a ottenere l'oggetto jQuery da document.activeElement? –
$ (document.activeElement) –
Questo non controlla la presenza di HTMLDivElement modificabili. Vedi la mia risposta qui sotto. –