2011-06-19 80 views
6

Khi nhấp vào liên kết trong google chrome, sự kiện tiêu điểm sẽ không kích hoạt. Tất cả các trình duyệt khác kích hoạt sự kiện trọng tâm cho các liên kết.Lỗi liên kết Javascript của Google Chrome

<a href=# onfocus="console.log('focus')">Link</a> 

Tôi không muốn đính kèm sự kiện onmousedown, nhưng onfocus.

Bất kỳ ai cũng có ý tưởng giải pháp.

EDIT:

tôi chắc chắn sẽ xem xét việc này một lỗi bởi vì tất cả các yếu tố có thể đặt tiêu khác kích hoạt tập trung vào nhấp chuột.

Ngay cả các yếu tố không thể lấy nét có tiêu điểm kích hoạt tabindex khi nhấp chuột vào google chrome.

<div tabindex="-1" onfocus="console.log('focus')">div</div> 

tôi không thể đính kèm cho cả clickfocus vì sau đó onclick, các trình duyệt khác sẽ gọi hàm hai lần. Tôi không thể phát hiện chức năng này vì nó yêu cầu sự tương tác của người dùng và tôi sẽ không phát hiện chuỗi tác nhân người dùng, bởi vì nó cũng sai.

Sử dụng html này:

<a href=# onfocus="console.log('focus')" onmousedown="console.log('mousedown')">Link</a> 

là họ cách nào để vô hiệu hóa thứ hai onmousedown gọi để ngăn chặn các chức năng được gọi là hai lần trong các trình duyệt google không.

EDIT 2:

Sau một số thử nghiệm thêm <input type=radio> cũng thất bại trong việc gọi tập trung trong google chrome. Tại sao trên thế giới là google chrome như thế này, trong khi Opera, IE và firefox đều ổn. Điều gì là điên rồ là trình duyệt webkit di động thậm chí còn kích hoạt tập trung vào các liên kết khi tôi thử nó trên thiết bị Android của mình.

+0

http://jsfiddle.net/82QXv/ –

+0

Trên thực tế, không hoạt động. Bên cạnh đó, khi tôi tập trung liên kết bằng cách sử dụng phím tab, sự kiện tiêu điểm sẽ phát liên tục. Điều này có vẻ bị hỏng. Chrome 12.0.742.100 –

+0

Để kiểm tra bằng phím 'tab': http://jsfiddle.net/82QXv/1/ –

Trả lời

1

Một việc xung quanh bạn có thể làm để tránh những đôi focus sự kiện từ popping trên các trình duyệt làm việc trong khi vẫn nhận được sự kiện focus để bật trên Chrome, là trên một bấm vào sự kiện kiểm tra xem có bất cứ điều gì có focus trên trang và nếu không, hãy kích hoạt sự kiện focus.

Với jQuery nó có thể được thực hiện như thế này:

$('a').click(function(e){ 
    if(!$('*:focus').length) $(this).trigger('focus');   
}); 

dụ: http://jsfiddle.net/niklasvh/qmcUt/

+1

Thú vị, nó xuất hiện 'document.activeElement' dùng để chỉ document.body khi kích hoạt' onmousedown', hoặc 'onclick' vì google chrome phần tử trên thực tế không bao giờ nhận được tiêu điểm. http://jsfiddle.net/qmcUt/36/ Ngoài ra, tôi đã chuyển sang 'mousedown' để kích hoạt khi hầu hết các trình duyệt kích hoạt 'focus'. – William

3

Điều đó thực sự hoạt động tốt, ngoại trừ sự kiện trọng tâm không được kích hoạt đơn giản bằng cách nhấp vào liên kết (thử tabbing và bạn sẽ thấy sự kiện kích hoạt). Tôi không nghĩ rằng đó là một lỗi, tại sao không chỉ bảo vệ an toàn và sử dụng cả hai?

+1

+1. Webkit không kích hoạt sự kiện trừ khi người dùng sử dụng bàn phím. – Triptych

+0

@Triptych - Tôi chỉ tự hỏi, tại sao? W3C dường như nói rằng nó là ok cho một "thiết bị trỏ" để tập trung lửa: http://www.w3.org/TR/html4/interact/scripts.html#adef-onfocus –

+0

Tôi đã chỉnh sửa bài viết của mình để giải thích thêm vấn đề, và tại sao nó phải được nộp như một lỗi. – William

0

Bạn có thể sử dụng Hack nhỏ:

<a href="#" onfocus="console.log('focus')" onclick="this.focus()">Link</a> 
Các vấn đề liên quan