2012-09-16 1 views
13

Voglio mettere a fuoco un elemento di input quando si fa clic su un div.focus() elemento di input con jQuery, ma il cursore non appare

mio HTML simile a questa:

<div class="placeholder_input"> 
    <input type="text" id="username" maxlength="100" /> 
    <div class="placeholder_container"> 
     <div class="placeholder">username</div> 
    </div> 
</div> 

E il mio script è:

$("#username").focus(function() { 
    $(this).next().hide(); 
}); 

$(".placeholder_input").mousedown(function() {    
    $(this).children(":first").focus(); 
}); 

Quando clicco nella casella di testo, il testo segnaposto scompare in modo corretto, ma il cursore lampeggiante non mostra nella casella di testo. (E non riesco a digitare il testo nella casella di testo)

All'interno del gestore mousedown eventi, l'espressione $(this).children(":first") seleziona l'elemento di input corretto, quindi non ho idea del perché la chiamata focus() non funziona.

risposta

10

Non funziona con il metodo mousedown; lo fa, però, il lavoro con i metodi mouseup() e click():

$(".placeholder_input").mouseup(function() {    
    $(this).children(":first").focus(); 
});​ 

JS Fiddle demo.

E:

$(".placeholder_input").click(function() {    
    $(this).children(":first").focus(); 
});​ 

JS Fiddle demo.

Riferimenti:

+0

Wow! Hai ragione ... Ma perché? – Zsolt

+0

Sinceramente non ne sono sicuro; e [testando con 'on()'] (http://jsfiddle.net/davidThomas/wpnNY/2/) non sembra lanciare alcuna informazione utile. Sospetto che sia perché l'evento 'mouseup' viene chiamato dopo il' mousedown' (e 'focus()'), che richiama l'attenzione sull'elemento '.placeholder_input', e lontano dall'ingresso' stesso'. –

0

mousdown non funziona, utilizzare click.

$(".placeholder_input").click(function() {    
    $(this).children(":first").focus(); 
});​ 
4

se ti ostini a usare mousedown, ritardare la messa a fuoco fino alla prossima tick

$(".placeholder_input").mousedown(function() {    
     var $el = $(this).children(":first"); 
     setTimeout(function() { 
      $el.focus(); 
     }, 0); 
}); 

http://jsfiddle.net/wpnNY/46/