2012-04-13 30 views
8

Với HTML sau:Tại sao Opera không ném sự kiện nhấp khi bạn đánh dấu một phần văn bản?

<div contenteditable="true">Some text</div> 

Và một số JS mà phát hiện sự kiện click với JQuery:

$("div").click(function() { 
    alert('click!'); 
}); 

Nếu bạn chọn một phần của văn bản trong div, sự kiện nhấp chuột sẽ không phải là được Opera mở (được thử nghiệm với Opera 11.61 trên Linux và 11.62 trên Windows). Nhấp đúp vào một từ để đánh dấu một phần là sẽ hoạt động.

Sự kiện được ném trong IE7-9, Firefox, Chrome và Safari. Có một chút sửa đổi JSFiddle here.

Hành vi dự kiến ​​này, lỗi JQuery, lỗi Opera hay một thứ gì đó khác?

+2

Điều này nghe giống như một lỗi trình duyệt. Bạn đã thử 'mousedown' hoặc' mouseup' làm cách giải quyết chưa? –

+0

Ồ, tôi đã làm bây giờ, và điều đó làm việc như một cách giải quyết, cảm ơn! Tôi vẫn muốn tìm nguyên nhân cho vấn đề ban đầu mặc dù. – kvikshaug

+0

Opera có coi nó là một sự kiện được chọn, nhưng với nó là một div không có sự kiện onselect ?? – Greg

Trả lời

2

hành vi nào là' chính xác 'chắc chắn là một câu hỏi thú vị. Tôi nghĩ về nó: Cá nhân tôi nghĩ rằng hành vi của Opera có ý nghĩa hơn, như những gì người dùng dự định làm ở đây rõ ràng là không phải "click" một cái gì đó nhưng để "chọn" một cái gì đó.

Mặt khác, tôi cũng nghĩ Opera nên thay đổi nó để tương thích với các trình duyệt khác (trừ khi chúng tôi có thể nhận các trình duyệt khác phù hợp với Opera). Khả năng tương thích là rất, rất quan trọng. Vì vậy, nói chuyện với chiếc mũ nhân viên Opera của tôi về: Tôi nghĩ rằng chúng tôi là chính xác, và tôi nghĩ rằng chúng ta nên sửa chữa rằng :-p

+0

Tôi đoán đây là chính thức như nó sẽ nhận được :) – kvikshaug

2

Các sự kiện nhấp được biết là có hành vi không nhất quán giữa các yếu tố khác nhau và các trình duyệt khác nhau. Tại trung tâm của nó, một sự kiện click được cho là sẽ được kích hoạt khi một phần tử duy nhất ghi lại một mousedown theo sau là một mouseup, xem jquery doc.

Lời khuyên tốt nhất mà tôi đã nghe nói là từ here:

hay không đây là một vấn đề phụ thuộc vào sự tương tác người dùng mà bạn muốn. Nhưng thông thường, bạn nên đăng ký tập lệnh onmousedown/up, trừ khi bạn hoàn toàn chắc chắn mình muốn sự kiện nhấp chuột và không có gì khác.

Vì vậy, trong thỏa thuận với nhận xét cho câu hỏi của bạn, giải pháp đơn giản nhất là đăng ký mousedown hoặc mouseup (tùy thuộc vào hành vi bạn đang tìm kiếm, hành vi gần nhất với 'click' sẽ là 'mouseup' ')

+0

Trong khi tôi đồng ý với những gì bạn nói, nó không thực sự trả lời câu hỏi về hành vi của Opera và cho dù đó là hành vi dự định hay một lỗi. Trừ khi bạn đang thực sự nói nó cố ý không xác định, trong trường hợp đó bạn sẽ phải sửa tôi. – kvikshaug

+0

Bạn nói đúng, tôi không có câu trả lời cho điều đó. So với nhiều API lập trình, tôi đã tìm thấy hầu hết các đối tượng văn bản và vùng chứa không có sự kiện nhấp, thường xuất hiện trên các phần tử tương tác với người dùng như nút. Vì vậy, nó không phải là đáng ngạc nhiên rằng nó không được xác định trên container div trong ví dụ của bạn. Nếu bạn thực sự muốn biết, tôi sẽ gửi email cho hỗ trợ Opera hoặc tạo một bài đăng trên diễn đàn Opera, họ có một cộng đồng thực sự tốt ở đó. – Sogger

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