Các document
và window
là các đối tượng khác nhau và họ có một số sự kiện khác nhau. Sử dụng addEventListener()
trên chúng lắng nghe các sự kiện dành cho một đối tượng khác. Bạn nên sử dụng một sự kiện thực sự có sự kiện mà bạn quan tâm.
Ví dụ, có một "resize"
sự kiện trên window
đối tượng không nằm trên document
đối tượng.
Ví dụ, "DOMContentLoaded"
sự kiện chỉ trên document
đối tượng.
Vì vậy, về cơ bản, bạn cần biết đối tượng nào nhận được sự kiện mà bạn quan tâm và sử dụng .addEventListener()
trên đối tượng cụ thể đó.
Đây là một biểu đồ thú vị cho thấy loại đối tượng nào tạo ra loại sự kiện nào: https://developer.mozilla.org/en-US/docs/DOM/DOM_event_Vference
Nếu bạn đang nghe một sự kiện lan truyền (chẳng hạn như sự kiện nhấp chuột), thì bạn có thể nghe sự kiện đó trên đối tượng tài liệu hoặc đối tượng cửa sổ. Sự khác biệt chính duy nhất cho các sự kiện lan truyền là trong thời gian. Sự kiện sẽ đánh vào document
đối tượng trước window
đối tượng vì nó xảy ra đầu tiên trong hệ thống phân cấp, nhưng sự khác biệt đó thường là không quan trọng để bạn có thể chọn một trong hai. Tôi thấy nói chung là tốt hơn để chọn đối tượng gần nhất với nguồn của sự kiện đáp ứng nhu cầu của bạn khi xử lý các sự kiện lan truyền. Điều đó sẽ đề nghị bạn nên chọn document
hơn window
khi một trong hai sẽ làm việc. Nhưng, tôi thường di chuyển gần hơn đến nguồn và sử dụng document.body
hoặc thậm chí một số cha mẹ phổ biến gần gũi hơn trong tài liệu (nếu có thể).