2010-05-07 29 views
11

Tôi hiện đang phát triển một ứng dụng web và đã gặp sự cố nhỏ. Tôi đang sử dụng ExtJS, nhưng tôi tin rằng đây là một câu hỏi chung về JS.Đảm bảo sự kiện onmouseout để kích hoạt

Khi con trỏ nhập thành phần HTML, sự kiện onmouseover được kích hoạt khi con trỏ rời khỏi thành phần đó, onmouseout được kích hoạt. Càng xa càng tốt. Thật không may, có vẻ như một người không thể hoàn toàn dựa vào hành vi này. Chuyển động của chuột rất nhanh có thể khiến sự kiện không kích hoạt (ví dụ như định vị lại con trỏ bằng máy tính bảng bút).

Các phương pháp hay nhất để xử lý những vấn đề này là gì? Tôi có cần theo dõi tất cả sự kiện onmousemove và theo dõi theo cách thủ công vị trí con trỏ cuối cùng và tự mình bắn sự kiện onmouseout thích hợp không?

Trả lời

3

Đây là vấn đề phổ biến và không tầm thường để giải quyết. Về cơ bản, không thể giải quyết bằng cách cố gắng xử lý di chuột qua/ra ở cấp phần tử riêng lẻ. Sử dụng Ext JS, thường được khuyến khích sử dụng xử lý sự kiện được ủy quyền khi có thể, cũng có thể giúp theo dõi các sự kiện chuột. Ví dụ, giám sát để di chuột qua/ra ở mức cao nhất có thể, và kiểm tra mục tiêu sự kiện và/hoặc mục tiêu liên quan (thuộc tính của đối tượng sự kiện được truyền vào hàm xử lý của bạn) để tìm ra yếu tố nào có liên quan trong bất kỳ sự kiện nào (tôi đã làm điều này bản thân mình - nó có thể nhận được khôn lanh, nhưng nó có hiệu quả). Nếu trường hợp sử dụng của bạn được giám sát cho các tình huống kéo/thả hợp lệ, các lớp DragZone và DropZone được thiết kế để thực hiện việc này.

Nếu bạn có thể điền vào một số chi tiết khác về những gì bạn đang cố gắng thực hiện nó có thể hữu ích.

+0

Tôi đã giải quyết nó bằng cách ghi đè Ext.dd.DropZone.notifyOver và tự bắn các sự kiện mouseout nếu chúng bị bỏ qua. Dường như làm việc khá đáng tin cậy cho đến nay. – n3rd

3

Tôi đã gặp phải sự cố tương tự trước đây và tôi đã sử dụng this technique. Điều này có thể không giúp đỡ với các tình huống khi bạn định vị lại con trỏ bằng máy tính bảng, tôi không có một kiểm tra nào khác, nhưng bạn có thể giả định đây là một sự cố bất thường nếu bạn đang nhắm mục tiêu người dùng web bình thường. Hãy cho tôi biết nếu điều đó hoạt động - nếu không, tôi sẽ xem liệu tôi có thể giúp thêm được không.

Martyn

+0

Hm, bài viết thú vị. Tôi không thực sự thấy làm thế nào điều này liên quan đến câu hỏi của tôi, mặc dù. Sau khi tất cả, tôi nhận được "quá ít" sự kiện, không quá nhiều. – n3rd

+1

Ah vâng - xin lỗi về điều đó, đã trả lời câu hỏi đó trước khi tôi có cà phê sáng nay. Không có cách nào tuyệt đối để đảm bảo rằng các sự kiện sẽ cháy trừ khi bạn tự cuộn. Như Konerak đề cập, hãy thêm người nghe vào trang và kiểm tra phần tử mà nó đang bị tấn công. Tôi sẽ bật phần tử hiện tại trong phương thức onmouseover và bật nó ra trong onmouseout, bạn sẽ cần phải viết một số logic để xem nó có đi sai ở đâu đó không. Không thanh lịch nhưng nên làm việc. Một lần nữa, xin lỗi vì sự nhầm lẫn của tôi – Martyn

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