Làm thế nào để có được phần tử tập trung với jQuery?


345

Sử dụng jQuery, làm cách nào tôi có thể lấy phần tử đầu vào có tiêu điểm của dấu mũ (con trỏ)?

Hay nói cách khác, làm thế nào để xác định xem đầu vào có tập trung vào dấu mũ không?



Có thể trùng lặp: stackoverflow.com/questions/516152/
Mạnh

Câu trả lời:


740
// Get the focused element:
var $focused = $(':focus');

// No jQuery:
var focused = document.activeElement;

// Does the element have focus:
var hasFocus = $('foo').is(':focus');

// No jQuery:
elem === elem.ownerDocument.activeElement;

Bạn nên sử dụng cái nào? trích dẫn các tài liệu jQuery :

Cũng như các bộ chọn lớp giả khác (những bộ bắt đầu bằng dấu ":"), nên đi trước: tập trung với tên thẻ hoặc một số bộ chọn khác; mặt khác, bộ chọn phổ quát ("*") được ngụ ý. Nói cách khác, trần $(':focus')là tương đương với $('*:focus'). Nếu bạn đang tìm kiếm phần tử hiện đang tập trung, $ (document.activeEuity) sẽ truy xuất nó mà không phải tìm kiếm toàn bộ cây DOM.

Câu trả lời là:

document.activeElement

Và nếu bạn muốn một đối tượng jQuery bao bọc phần tử:

$(document.activeElement)

2
nhưng chờ đã, làm thế nào để tôi có được yếu tố teh có dấu mũ?
dave

@dave. Bạn có ý nghĩa gì "có dấu mũ" ? tập trung? con chuột ở trên đó?
gdoron đang hỗ trợ Monica

đây là tình huống của tôi: khi tôi nhấp vào một yếu tố cụ thể, tôi muốn đặt một ký tự trong thành phần văn bản đầu vào tập trung cuối cùng. Về cơ bản yếu tố đã tập trung cuối cùng hoặc bên phải trước khi nhấp vào yếu tố cụ thể đó.
dave

1
@dave. Nó không thể được thực hiện. Tôi nghĩ chỉ IE mới có tính năng này, nhưng bây giờ bạn đang hỏi một câu hỏi khác, bạn nên thực hiện nó trong một câu hỏi mới.
gdoron đang hỗ trợ Monica

3
Tôi thích cách bạn sử dụng tên biến tiền tố $ $focused, vì tôi giả sử bạn làm điều đó để biểu thị var là một đối tượng jquery. TYVM.
Valamas

36
$( document.activeElement )

Sẽ truy xuất nó mà không phải tìm kiếm toàn bộ cây DOM như được đề xuất trên tài liệu jQuery


1
Làm thế nào để có được yếu tố có dấu mũ?
dave

6

Tôi đã thử nghiệm hai cách trong Firefox, Chrome, IE9 và Safari.

(1). $(document.activeElement)hoạt động như mong đợi trong Firefox, Chrome và Safari.

(2). $(':focus')hoạt động như mong đợi trong Firefox và Safari.

Tôi di chuyển vào chuột để nhập 'tên' và nhấn Enter trên bàn phím, sau đó tôi cố gắng lấy phần tử tập trung.

(1). $(document.activeElement)trả về đầu vào: text: name như mong đợi trong Firefox, Chrome và Safari, nhưng nó trả về đầu vào: submit: addPassword trong IE9

(2). $(':focus')trả về đầu vào: text: name như mong đợi trong Firefox và Safari, nhưng không có gì trong IE

<form action="">
    <div id="block-1" class="border">
        <h4>block-1</h4>
        <input type="text" value="enter name here" name="name"/>            
        <input type="button" value="Add name" name="addName"/>
    </div>
    <div id="block-2" class="border">
        <h4>block-2</h4>
        <input type="text" value="enter password here" name="password"/>            
        <input type="submit" value="Add password" name="addPassword"/>
    </div>
</form>

5

Thử cái này:

$(":focus").each(function() {
    alert("Focused Elem_id = "+ this.id );
});

Vâng, đó là lý do tại sao vòng lặp này sẽ chỉ có một lần lặp. cảnh báo chỉ là để chứng minh ví dụ. Nếu bạn có biến này, bạn có thể mọi thứ với phần tử mà bạn muốn.
Adil Malik

Làm thế nào có thể tập trung nhiều hơn một yếu tố?
Andreas Furster

@AndreasFurster bạn nói đúng. Sẽ luôn chỉ có một lần lặp trong vòng lặp này. Đây có thể không phải là cách tốt nhất để đạt được mục tiêu, nhưng nó hoạt động.
Adil Malik

Xem câu trả lời được chấp nhận để tìm hiểu lý do tại sao đây là cách tồi tệ nhất / kém hiệu quả nhất để làm điều đó. (không cần thiết .eachkhông chịu được)
Brad Kent

2

Làm thế nào là nó không ai đã đề cập ..

document.activeElement.id

Tôi đang sử dụng IE8 và chưa thử nghiệm nó trên bất kỳ trình duyệt nào khác. Trong trường hợp của tôi, tôi đang sử dụng nó để đảm bảo một trường có tối thiểu 4 ký tự và tập trung trước khi hành động. Khi bạn nhập số thứ 4, nó sẽ kích hoạt. Trường có id là 'năm'. Tôi đang dùng..

if( $('#year').val().length >= 4 && document.activeElement.id == "year" ) {
    // action here
}

1

$(':focus')[0] sẽ cung cấp cho bạn các yếu tố thực tế.

$(':focus') sẽ cung cấp cho bạn một loạt các yếu tố, thường chỉ có một yếu tố được tập trung tại một thời điểm vì vậy điều này chỉ tốt hơn nếu bạn bằng cách nào đó có nhiều yếu tố tập trung.



0

Nếu bạn muốn xác nhận nếu tiêu điểm là với một yếu tố thì

if ($('#inputId').is(':focus')) {
    //your code
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.