jQuery mất sự kiện tập trung


253

Tôi đang cố gắng hiển thị một container nếu trường đầu vào lấy tiêu điểm và - đó là vấn đề thực tế - ẩn container nếu mất tiêu điểm. Có một sự kiện ngược lại cho trọng tâm của jQuery không?

Một số mã ví dụ:

<input type="text" value="" name="filter" id="filter"/>

<div id="options">some cool options</div>

<script type="text/javascript">
  $('#options').hide();

  $('#filter').focus(function() {
    $('#options').appear();
  });
</script>

Và những gì tôi muốn làm là một cái gì đó như thế này:

$('#filter').focus_lost(function() {
  $('#options').hide();
});

Câu trả lời:


419

Sử dụng sự kiện mờ để gọi chức năng của bạn khi phần tử mất tiêu điểm:

$('#filter').blur(function() {
  $('#options').hide();
});

3
Điều gì sẽ xảy ra nếu trình duyệt như chrome tự động điền vào hộp văn bản, tôi không nghĩ rằng nó sẽ kích hoạt làm mờ ()
pita

40

Như thế này:

$(selector).focusout(function () {
    //Your Code
});

10
sự khác biệt từ điều này đến là blurgì?
cregox

5
Phương thức làm mờ được sử dụng để loại bỏ tiêu điểm (nghĩa là không tạo dòng điện) đối tượng mà nó thuộc về. Đưa ra một trường văn bản mờ sẽ di chuyển con trỏ đến trường tiếp theo. Đưa ra một cửa sổ mờ sẽ di chuyển nó đằng sau tất cả những người khác. Đây không phải là một từ dành riêng để bạn có thể khai báo biến hoặc hàm của riêng bạn được gọi là mờ nhưng nếu bạn làm vậy thì bạn sẽ không thể sử dụng phương thức này để kiểm soát đối tượng nào là hiện tại.
SoftwareARM

2
Phương thức lấy nét được sử dụng để lấy tiêu điểm (tức là tạo dòng điện) cho đối tượng mà nó thuộc về. Đưa ra một trường văn bản, tiêu điểm sẽ di chuyển con trỏ đến trường đó. Đưa ra một cửa sổ trọng tâm sẽ di chuyển nó trước mặt tất cả những người khác. Các hành động không chỉ định một đối tượng cụ thể sẽ áp dụng để sử dụng đối tượng có trọng tâm. Đây không phải là một từ dành riêng để bạn có thể khai báo biến hoặc hàm của riêng bạn được gọi là tiêu điểm nhưng nếu bạn làm như vậy thì bạn sẽ không thể sử dụng phương thức này để kiểm soát đối tượng nào là hiện tại.
SoftwareARM

25
Lời giải thích của SoftwareARM lúc đầu không có ý nghĩa gì với tôi, vì vậy tôi đã tìm thấy một lời giải thích thay thế trên trang tài liệu của jQuery ( api.jquery.com/f Focusout ) mà tôi nghĩ sẽ hữu ích cho người khác: Sự kiện tập trung được gửi đến một phần tử khi nó, hoặc bất kỳ yếu tố nào bên trong nó, mất tập trung. Điều này khác với sự kiện mờ ở chỗ nó hỗ trợ phát hiện mất tiêu điểm từ các thành phần chính (nói cách khác, nó hỗ trợ hiện tượng bong bóng sự kiện).
Brad


12

sự kiện mờ: khi yếu tố mất tập trung.

sự kiện tập trung: khi phần tử, hoặc bất kỳ phần tử nào bên trong nó, mất tiêu điểm.

Vì không có gì bên trong phần tử bộ lọc, cả mờ và tiêu cự sẽ hoạt động trong trường hợp này.

$(function() {
  $('#filter').blur(function() {
    $('#options').hide();
  });
})

jsfiddle có mờ: http://jsfiddle.net/yznhb8pc/

$(function() {
  $('#filter').focusout(function() {
    $('#options').hide();
  });
})

jsfiddle với tiêu điểm: http://jsfiddle.net/yznhb8pc/1/


0

Nếu 'Tùy chọn tuyệt vời' bị ẩn khỏi chế độ xem trước khi trường được tập trung thì bạn sẽ muốn tạo tùy chọn này trong JQuery thay vì có nó trong DOM để bất kỳ ai sử dụng trình đọc màn hình sẽ không thấy thông tin không cần thiết. Tại sao họ phải nghe nó khi chúng ta không phải xem nó?

Vì vậy, bạn có thể thiết lập các biến như vậy:

var $coolOptions= $("<div id='options'></div>").text("Some cool options");

và sau đó nối thêm (hoặc trả trước) vào trọng tâm

$("input[name='input_name']").focus(function() {
    $(this).append($coolOptions);
});

và sau đó loại bỏ khi tiêu điểm kết thúc

$("input[name='input_name']").focusout(function() {
    $('#options').remove();
});
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.