2012-09-16 27 views
13

divをクリックしたときに入力要素にフォーカスしたい。jQueryでinput()要素を入力してもカーソルが表示されない

私のHTMLは次のようになります。

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

そして、私のスクリプトは次のとおりです。

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

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

私はテキストボックスにクリックすると、プレースホルダのテキストが正しく消えますが、点滅するカーソルが表示されません。テキストボックスに。

mousedownイベントハンドラの内部では、$(this).children(":first")式は正しい入力要素を選択するため、focus()呼び出しが機能しない理由はわかりません。

答えて

10

mousedownメソッドでは機能しません。

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

JS Fiddle demo:それは、しかし、mouseup()click()方法で作業を行います。

そして:

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

JS Fiddle demo

参考文献:

+0

うわーまでフォーカスを遅らせます!あなたは正しい...しかし、なぜですか? – Zsolt

+0

正直に分かりません。 [on()でテストする](http://jsfiddle.net/davidThomas/wpnNY/2/)は有用な情報を投げかけていないようです。 'mouseup'イベントが' mousedown'(そして 'focus()')の後に呼び出され、 '.placeholder_input'要素にフォーカスを戻し、' input'自体から離れているからです。 –

0

mousdownは、clickを使用してください。

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

あなたがmousedownを使う、という場合は、次のダニ

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

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

関連する問題