2012-07-18 23 views
32

Giả sử tôi làm điều này:Lấy đối tượng nhấp đã làm hiển thị jquery blur() sự kiện

$(target).blur(function(e){ 
    //do stuff 
}); 

Có cách nào để lấy các đối tượng mà được nhấp vào để kích hoạt các hành động mờ?

Tôi đã thử sử dụng e.target, nhưng dường như trả về đối tượng được đính kèm với hành động làm mờ thay vì đối tượng được nhấp.

+2

Tại sao câu hỏi này được đánh dấu là một trùng lặp? Tôi đã không tìm thấy một câu hỏi cụ thể về sự kiện blur của jQuery. Nếu nó thực sự là một bản dupe, vui lòng liên kết đến câu hỏi trùng lặp. –

+0

Có ai tìm cách tạo trình duyệt không phải Chromium trong tình huống này không? Tabbing bên ngoài của lĩnh vực này không thể được xử lý để có được các yếu tố tập trung mới, theo như tôi có thể nói. 'var target = e.toElement || e.relatedTarget; 'không trả về gì cả. Thông số kỹ thuật crappy từ các nhà văn đặc tả crappy ... – user2173353

Trả lời

29

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, điều này sẽ làm điều đó:

$(function() { 

    var clicky; 

    $(document).mousedown(function(e) { 
     // The latest element clicked 
     clicky = $(e.target); 
    }); 

    // when 'clicky == null' on blur, we know it was not caused by a click 
    // but maybe by pressing the tab key 
    $(document).mouseup(function(e) { 
     clicky = null; 
    }); 

    $(target).blur(function(e) { 
     console.log(clicky); 
    });​​ 

}); 
+6

Điều này chỉ hoạt động nếu người dùng * nhấp * trên một phần tử khác. Nó không hoạt động nếu người dùng được gắn thẻ với nó, hoặc nó đã nhận được tiêu điểm bằng phương pháp khác. –

1

Sử dụng chức năng này trong phạm vi blur trình xử lý sẽ cung cấp cho bạn phần tử blured.

$(target).blur(function(e){ 
    var bluredElement = this; // dom element 
    // To make a jQuery object 
    var bluredElement = $(this); 
}); 

Trong vòng blur sự kiện, bạn không thể xem yếu tố được nhấp. Để có được phần tử biên tập click, bạn cần click sự kiện. Ví dụ:

$(element).click(function() { 
    var clickedElement = this; 
}); 

Và để có được những yếu tố tập trung bạn có thể sử dụng :focus chọn như: $(':focus') sẽ trả về cho bạn tập trung phần tử trong tài liệu.

+0

Tôi thấy rằng tôi cần phải đặt '$ someElement.is (': focus')' hoặc '$ (': focus')' trong một hàm 'setTimeout', được kích hoạt bởi blur xử lý, để cho một số trình duyệt có cơ hội tập trung vào yếu tố tiếp theo. –

9

Bên trong trình xử lý sự kiện, this sẽ là thành phần mà sự kiện được ràng buộc và e.target sẽ là thành phần kích hoạt sự kiện (có thể hoặc không giống như this).

Bạn đang giao một sự kiện blur, chứ không phải sự kiện click. Vì vậy, bên trong sự kiện của bạn, bạn sẽ có phần tử mà bạn blur ed. Nếu bạn muốn phần tử biên tập click, bạn cần một sự kiện khác để có được điều đó.

blur có thể được kích hoạt bởi các sự kiện khác, chẳng hạn như tập trung điều gì đó; không chỉ nhấp vào một cái gì đó. Vì vậy, không có cách nào để có được yếu tố "gây ra sự nhòe".

+0

Không đúng là không có cách nào. Tham khảo câu trả lời này: http://stackoverflow.com/a/11544589/1450294 –

38

Bí quyết là phải chờ một đánh dấu thêm:

$(el).blur(function (event) { 
    // If we just hangout an extra tick, we'll find out which element got focus really 
    setTimeout(function(){ 
     document.activeElement; // This is the element that has focus 
    },1); 
}) 
+1

Tôi thấy rằng 'setTimeout' cần một độ trễ rõ ràng để cho phép sự kiện' click' khác kích hoạt; cũng cho tôi (jQuery 1.8) 'document.activeElement' là' body', không hữu ích lắm :) – drzaus

+0

Điều này làm việc tốt trong chrome 30 và firefox 19. –

+0

hiện công việc này trong IE9 + và các trình duyệt tốt khác? – chovy

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