2009-02-05 23 views
64

Làm cách nào để chọn một thành phần có tiêu điểm hiện tại?Cách chọn một phần tử đã tập trung vào nó bằng jQuery

Không có :focus lọc trong jQuery, đó là lý do tại sao chúng ta có thể sử dụng một cái gì đó như thế này:

$('input:focus').someFunction(); 
+2

gì là bạn thực sự cố gắng để làm như vậy tôi có thể biết nếu có một cách tiếp cận tốt hơn – TStamper

+3

http://stackoverflow.com/question/967096/using-jquery-to-test-if-an-input-có-focus – gnarf

+0

Lưu ý rằng bạn có thể sử dụng '$ (': focus')' để tìm phần tử hiện đang tập trung trong tài liệu hiện tại. –

Trả lời

32

Thực sự là cách tốt nhất để làm điều đó là để thiết lập một handler cho sự kiện onFocus, và sau đó thiết lập một biến thành ID của phần tử có tiêu điểm.

một cái gì đó như thế này: bạn

var id; 

$(":input").focus(function() { 
    id = this.id; 
}); 
+1

Tại sao $ (this) .attr ('id') sử dụng this.id – redsquare

+3

Becareful vì cửa sổ cũng có thể nhận tiêu điểm, có nghĩa là mã này sẽ không hoạt động như mong đợi trong mọi trường hợp. – cbp

+9

Cửa sổ IS là đầu vào? Mã này cho biết chỉ chọn các yếu tố đầu vào. cửa sổ không kích hoạt gọi lại. –

5

Có cố gắng

$.extend($.expr[':'], { 
    focused: function(elem) { return elem.hasFocus; } 
}); 

alert($('input :focused').length); 
+1

'tài liệu.hasFocus() 'không tồn tại, nhưng một phương thức hoặc thuộc tính như vậy không có sẵn cho các phần tử. Đã thử trong Firefox và Chromium. – akaihola

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

tôi sử dụng jQuery.

Nó sẽ cảnh báo id của phần tử đang tập trung.

Tôi hy vọng nó hữu ích cho bạn.

+4

Từ những gì tôi có thể thu thập, hỗ trợ cho bộ lọc ': focus' đã được thêm vào jquery vì OP đã hỏi câu hỏi này, vì vậy câu trả lời này bây giờ là hợp lệ. – keithjgrant

+2

Tôi nghĩ rằng điều này nên được chọn làm câu trả lời. cảm ơn BiBi –

+0

Nó không làm việc cho tôi. Tôi đang ở trong phiên bản 1.7.1! –

5

Nếu bạn sử dụng JQuery, bạn có thể viết một selector like this:

$.expr[':'].focus = function(a){ return (a == document.activeElement); } 

Sau đó, bạn có thể chọn phần tử hiện tập trung: $(":focus")

Không chỉ điều khiển biểu mẫu có thể có trọng tâm. Bất kỳ phần tử html nào có tabindex đều có thể được tập trung trong các trình duyệt hiện đại.

+0

Hiệu suất của việc này như thế nào? Ngoài ra $ (".: tập trung") dường như đã được thực hiện bởi jQuery 1.7.3. Nó ít nhất hoạt động tốt mà không cần thực hiện của bạn cho tôi. – Hengjie

4

Dỡ bỏ từ các ví dụ cho các phiên bản jQuery hiện tại (1,7) tài liệu:

$(elem).is(":focus"); 
152

$(document.activeElement) sẽ trở lại các yếu tố hiện tập trung và nhanh hơn bằng cách sử dụng selector giả: tập trung.

Nguồn: http://api.jquery.com/focus-selector/

+33

* this * phải là câu trả lời đã chọn. không có traversal DOM và nhanh hơn nhiều so với bất kỳ giải pháp nào khác được cung cấp tại đây. – Jimmery

+3

Đây là câu trả lời đúng. Tài liệu jQuery thậm chí còn nói không sử dụng bộ chọn giả: tập trung khi bạn chỉ muốn phần tử hiện được chọn. – Josh

+2

Có, ngay cả tài liệu jquery đề xuất phương pháp này trong truy vấn giả. – IAmNaN

1

Đối với yếu tố kiểm tra có tập trung hay không.

if ($("...").is(":focus")) { 
    ... 
} 
0

Đây là phiên bản CoffeeScript của nó. Dựa vào mã jmanrubia của:

$.expr[':'].focus = (a) -> a is document.activeElement

Bạn cũng sẽ gọi nó như vậy $(".:focus")

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