2012-09-16 7 views
13

Ich möchte ein Eingabeelement fokussieren, wenn ein div angeklickt wird.focus() Eingabeelement mit jQuery, aber der Cursor erscheint nicht

Mein HTML sieht wie folgt aus:

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

Und mein Skript ist:

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

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

Als ich in das Textfeld klicken, wird der Platzhalter-Text korrekt verschwindet, aber der blinkende Cursor zeigt nicht in der Textbox. (Und ich kann keinen Text in das Textfeld eingeben)

Innerhalb der mousedown Ereignisbehandlungsroutine, der $(this).children(":first") Ausdruck das richtigen Eingabeelement auswählt, so ich habe keine Ahnung, warum der focus() Anruf nicht funktioniert.

Antwort

10

Es funktioniert nicht mit der mousedown Methode; es funktioniert, aber die Arbeit mit den mouseup() und click() Methoden:

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

JS Fiddle demo.

Und:

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

JS Fiddle demo.

Referenzen:

+0

Wow! Du hast Recht ... Aber warum? – Zsolt

+0

Ich bin ehrlich gesagt nicht sicher; und [testet mit 'on()'] (http://jsfiddle.net/davidThomas/wpnNY/2/) scheint keine nützlichen Informationen zu liefern. Ich nehme an, es liegt daran, dass das 'mouseup'-Ereignis nach dem' mousedown' (und 'focus()') aufgerufen wird, was den Fokus zurück auf das '.placeholder_input'-Element und weg von der' Eingabe' selbst zieht. –

0

mousdown wird nicht funktionieren, verwenden Sie click.

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

wenn Sie darauf bestehen, mousedown verwenden, verzögern den Fokus bis zum nächsten Tick

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

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

Verwandte Themen