2011-01-01 16 views
6

Làm cách nào để tìm một hộp văn bản (hoặc vùng văn bản) hiện đang được lấy nét? Tôi không quan tâm để biết đó là một trong những, nó chỉ cần biết nếu một trong những tập trung (có con trỏ vào nó). Làm thế nào tôi sẽ làm điều này với javascript và jquery?Tìm xem một hộp văn bản hiện có được chọn là

Trả lời

15

Vì bạn đã tìm thấy document.activeElement, bạn có thể kiểm tra nodeName của nó.

if (document.activeElement.nodeName == 'TEXTAREA' || document.activeElement.nodeName == 'INPUT') { 
    // .... 
} 

Điều gì đó tương tự.

+0

Cảm ơn, nhưng làm thế nào để có được đối tượng jQuery từ document.activeElement? –

+1

$ (document.activeElement) –

+0

Điều này không kiểm tra HTMLDivElements có thể chỉnh sửa. Xem câu trả lời của tôi dưới đây. –

2
$('#yourTextAreaID:focus'); 

sẽ không hoạt động. :) Nhưng

$('#yourTextAreaID').focus(function(){ 
    // do something 
}); 

sẽ trích đoạn mã //do something khi phần tử nhận được tiêu điểm.

+0

Ok, nhưng tại bất kỳ thời gian nhất định (không neccesarily khi người dùng nhấp vào một textbox) làm thế nào tôi sẽ kiểm tra nếu bất kỳ hộp văn bản nào có tiêu điểm? –

+0

Cho rằng OP không quan tâm "cái nào là", tôi đề nghị sửa đổi bộ chọn thành: '$ ('textarea: focus, input: text: focus') ...' –

+0

Tôi vừa tìm thấy tài liệu. activeElement. Làm thế nào tôi có thể kiểm tra xem đó là một hộp văn bản hay textarea? –

1
$('#target').focus(function() { 
    alert('Handler for .focus() called.'); 
}); 

Ngoài ra Hãy thử:

alert($("*:focus").attr("id")); 

http://jsfiddle.net/4KVvV/

+0

như @lonesome được chỉ ra ở trên,: di chuột không phải là bộ chọn jquery thực. Tôi nghĩ nó cũng vậy, nhưng khi tôi kiểm tra tài liệu, tôi không thể tìm thấy nó được đề cập. – JakeParis

6

Ok, chỉ cần tìm ra. Dưới đây là những gì tôi đã làm:

function checkFocus() { 

    if ($(document.activeElement).attr("type") == "text" || $(document.activeElement).attr("type") == "textarea") { 

    //Something's selected 

    return true; 

} 

} 
+0

Ai đó đánh dấu câu trả lời này là câu trả lời, tôi nói rằng tôi phải chờ 2 ngày. :) –

+2

bạn là người duy nhất * có thể * đánh dấu mục này là câu trả lời. Ngoài ra, hãy xem trang trợ giúp [Stack Overflow Markdown] (http://stackoverflow.com/editing-help/), để được hướng dẫn về cách định dạng câu trả lời của bạn, đặc biệt là các mẫu mã. –

+0

Lưu ý rằng thao tác này sẽ hoạt động trên tất cả các trình duyệt hiện đại, nhưng nó sẽ * không * hoạt động trên nhiều trình duyệt đã lỗi thời. Hãy xem [câu trả lời này] (http://stackoverflow.com/questions/1009777/determining-which-element-has-focus/1009787#1009787) để biết kỹ thuật khắc phục điều này. – lonesomeday

2

Mở rộng câu trả lời chấp nhận một tấm séc cho HTMLDivElements thể chỉnh sửa:

if (document.activeElement.nodeName == 'TEXTAREA' 
    || document.activeElement.nodeName == 'INPUT' 
    || (document.activeElement.nodeName == 'DIV' 
     && document.activeElement.isContentEditable)) { 
    // … 
} 
Các vấn đề liên quan