2012-09-16 27 views
13

Tôi muốn tập trung vào phần tử đầu vào khi một div được nhấp vào.phần tử đầu vào focus() với jQuery, nhưng con trỏ không xuất hiện

HTML của tôi trông như thế này:

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

Và kịch bản của tôi là:

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

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

Khi tôi nhấp vào hộp văn bản, văn bản giữ chỗ biến mất một cách chính xác, nhưng con trỏ nhấp nháy không hiển thị trong hộp văn bản. (và tôi không thể nhập bất kỳ văn bản nào vào hộp văn bản)

Bên trong bộ xử lý sự kiện mousedown chọn phần tử nhập chính xác, vì vậy tôi không biết tại sao cuộc gọi focus() không hoạt động.

Trả lời

10

Nó không hoạt động với phương pháp mousedown; nó, tuy nhiên, làm việc với các mouseup()click() phương pháp:

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

JS Fiddle demo.

Và:

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

JS Fiddle demo.

Tài liệu tham khảo:

+0

Wow! Bạn nói đúng ... Nhưng tại sao? – Zsolt

+0

Tôi thành thật không chắc chắn; và [thử nghiệm với 'on()'] (http://jsfiddle.net/davidThomas/wpnNY/2/) dường như không đưa ra bất kỳ thông tin hữu ích nào. Tôi nghi ngờ đó là vì sự kiện 'mouseup' được gọi sau' mousedown' (và 'focus()'), lấy tiêu điểm trở lại phần tử '.placeholder_input', và cách xa' đầu vào' chính nó. –

0

mousdown sẽ không hoạt động, sử dụng click.

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

nếu bạn nhấn mạnh vào việc sử dụng mousedown, trì hoãn việc tập trung cho đến khi dấu chọn bên cạnh

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

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

Các vấn đề liên quan