2013-04-16 16 views
9

Come mantenere il Focus su una casella di testo? anche se fai clic in qualsiasi punto del browser.Come impedire a un elemento di perdere lo stato attivo?

$("#txtSearch").focus(); 
+6

Sto indovinando un sacco di caffè non è una risposta accettabile? Stai per forzare l'utente a premere invio per inviare il modulo? – lucuma

+0

Nah lo toccherà perché sto usando un tablet –

risposta

3
$("html").click(function(){ 
    $("#txtSearch").focus(); 
}); 

Demo Live:http://jsfiddle.net/QhaLY/

+0

* Tecnicamente * è ancora possibile digitare '# txtSearch2' se sei molto veloce. – h2ooooooo

+1

@ h2ooooooo: O se premi "tab" –

+1

@ h2ooooooo sono d'accordo con David. La mia risposta impedisce di fare clic in qualsiasi altro punto, ma non impedisce la tab. La risposta di Konstantin è la soluzione migliore. – Curt

1
$('body').click(function(){$("#txtSearch").focus();}); 
+0

funziona perfettamente grazie all'uomo, molto apprezzato –

18

È necessario abbonarsi al blur caso di textbox e ripristinare messa a fuoco con un piccolo timeout:

$('#txtSearch').blur(function (event) { 
    setTimeout(function() { $("#txtSearch").focus(); }, 20); 
}); 

In questo modo non ci si affida alla sottoscrizione degli eventi di nessun altro elemento nella pagina. Se ti iscrivi a body click o html click, non verrà eseguito se qualsiasi altro elemento impedisce la propagazione del suo evento click, inoltre non funzionerà quando si esce da textbox.

Esempio:

<!-- I will not propagate my click to top level DOM elements --> 
<button id="button">Click me</button> 

<script> 
$('#button').click(function (event) { 
    event.stopPropagation(); 
}); 
</script> 
+0

+1 questa è l'unica risposta finora che gestisce eventi come tabulati sfocati. –

+0

Sfocatura è l'evento che si attiva quando l'elemento attivo è stato perso su un elemento – lucuma

+1

@Curt Ho incluso alcune spiegazioni sul perché non gestire il clic. –

0

Ci sono altri modi di perdere fuoco che cliccando zona lontana dall'ingresso cioè tabulazione. Se si vuole evitare di perdere attenzione evento uso sfocatura cioè

document.getElementById('txtSearch').addEventListener('blur', e => { 
 
    e.target.focus(); 
 
});

Problemi correlati