2012-09-16 16 views
13

Bir div öğesine tıklandığında bir giriş öğesine odaklanmak istiyorum.focus() jQuery ile giriş öğesi, ancak imleç görünmez

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

Ve benim senaryom:

Benim HTML şuna benzer ben metin kutusuna tıkladığınızda, tutucu metni doğru kaybolur, ancak yanıp sönen bir imleç görünmüyor

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

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

metin kutusunda. $(this).children(":first") ifadesi doğru giriş elemanını seçer, mousedown olay işleyici İçinde

(ve metin kutusuna herhangi bir metin yazamazsınız), bu yüzden focus() çağrı çalışmıyor neden hiçbir fikrim yok.

cevap

10

mousedown yöntemiyle çalışmaz; kadar da olsa mouseup() ve click() yöntemlerle çalışır:

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

JS Fiddle demo.

Ve:

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

JS Fiddle demo.

Referanslar:

+0

Vay kadar odak geciktirmek! Haklısın ... Ama neden? – Zsolt

+0

Gerçekten emin değilim; ve [on (on) ile test etmek() '] (http://jsfiddle.net/davidThomas/wpnNY/2/) herhangi bir yararlı bilgi vermez. Şüpheliyim çünkü "mouseup" olayı "mousedown" (ve "focus()") 'den sonra çağrılır, bu da odağı' .placeholder_input 'öğesine geri çeker ve' input'un kendisinden uzaklaşır. –

0

mousdownclick kullanın çalışmaz. mousedown kullanımıyla ilgili

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

ısrar ediyorsan sonraki kene

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

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