2012-08-18 27 views
5

Tôi đã ràng buộc sự kiện transitionend tới div1. Khi quá trình chuyển đổi của div1 kết thúc, sự kiện đã diễn ra. Không có vấn đề gì.Tại sao sự kiện chuyển tiếp có thể chạy khi quá trình chuyển đổi của phần tử được kết thúc?

tôi gặp phải một trường hợp đặc biệt:

tôi đã thêm 3 đoạn để div1 này, khi quá trình chuyển đổi của mỗi đoạn văn được chấm dứt, transitionend kiện div1 's cũng chạy. Vì vậy, sự kiện transitionend đã chạy 4 lần. >. <

Trong transitionend cơ quan chức năng biết lắng nghe sự kiện của div1 's, tôi có thể thấy rằng event.target! == this. Tôi cảm thấy nó khá là lố bịch!

Cả Chrome và Firefox đều có vấn đề này. Vì vậy, tôi đoán đây không phải là lỗi triển khai HTML5 spec của trình duyệt.

Có ai có thể giải thích tại sao sự kiện transitionend của phần tử cũng có thể được kích hoạt bởi phần tử con của phần tử này không?

Cảm ơn bạn.

+0

Bạn có thể gửi mã của bạn? – tptcat

+0

Tôi không thể nhận mã sinh sản của vấn đề này. Nhưng tôi có thể chắc chắn rằng tôi thấy 'event.target! == this' trong cơ thể của hàm listener của sự kiện 'transitionend'. Tôi không thể hiểu vấn đề kỳ lạ này. Bạn có nghĩ đây là lỗi của cả Chrome và Firefox? – weilou

Trả lời

9

Điều này được gọi là bọt sự kiện. Nhiều sự kiện xảy ra trên một phần tử con, theo mặc định, bong bóng lên thông qua các bậc cha mẹ sau khi xử lý sự kiện được gọi trên đối tượng ban đầu. Bạn có thể phát hiện bọt khí như bạn đã nhận thấy bằng cách kiểm tra đối tượng event hoặc bạn có thể ngăn chặn bong bóng bằng cách dừng quá trình truyền khi bạn xử lý sự kiện trên đối tượng nguồn.

Dừng truyền là một trong những điều khác biệt trong IE so với các trình duyệt khác. Trong các trình duyệt khác, bạn gọi:

event.stopPropagation() 

trong IE trước khi IE9:

window.event.cancelBubble = true; 
+1

Cảm ơn bạn đã trả lời. Thứ nhất, tôi nghĩ rằng sự kiện 'transitionend' phải là một sự kiện đặc biệt. Nó không nên được thêm vào chuỗi sự kiện sủi bọt. Vì vậy, W3C sẽ cải thiện thông số của sự kiện HTML5 'transitionend'. Thứ hai, tôi thực sự không ràng buộc sự kiện 'transitionend' thành 3 đoạn văn. Vậy ... Có vẻ như đó là lỗi của Chrome và lỗi triển khai HTML5 của Firefox? Tôi chỉ đặt 'transition' thành 3 đoạn văn. – weilou

+3

@WeiLou - rất nhiều sự kiện bong bóng (nhấp chuột, khóa, v.v ...). Đó là cách thnigs làm việc trong một trình duyệt để 'transitionend' không khác với các sự kiện khác. Bạn chỉ cần biết rằng bây giờ và mã cho nó. Nếu bạn muốn biết nếu sự kiện thuộc về đối tượng cụ thể này, thì chỉ cần nhìn vào 'event.target' để xem nó có khớp với đối tượng của bạn hay không hoặc nó là một đối tượng nào khác. Bong bóng có thể rất, rất hữu ích trong một số trường hợp. – jfriend00

+0

Cảm ơn bạn đã bình luận. :) – weilou

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