- vừa được xem lúc

Event Bubbling in JavaScript – How Event Propagation Works

0 0 4

Người đăng: Vũ Trần Lê Anh

Theo Viblo Asia

banner.png

Khái niệm

Event Bubbling là một cơ chế trong JavaScript (DOM) mà khi một sự kiện xảy ra trên một phần tử, nó sẽ "bong bóng" từ phần tử đó lên qua cha, ông, cụ... cho đến tận document.

📣 Nghĩa là: sự kiện được "phát ra" từ element gốc → truyền dần lên các element bao ngoài (theo thứ tự từ trong ra ngoài).

Ví dụ

🧱 HTML

🔗 JS pic2.png

Khi click vào nút button!. Console sẽ in ra

pic3.png

Cơ chế hoạt động của một sự kiện DOM

Sự kiện đi qua 3 giai đoạn:

  • Capturing phase (bắt đầu từ document xuống đến phần tử mục tiêu)
  • Target phase (tại phần tử xảy ra sự kiện)
  • Bubbling phase (từ phần tử → cha → ông... → document) ✅Event Bubbling nằm ở đây

Tại sao Bubbling lại quan trọng

Giả sử bạn muốn lắng nghe sự kiện trên OuterElement, nếu như không có cơ chế Bubbling, bạn phải lắng nghe hết tất cả các element nằm bên trong chính nó. Điều này thật kinh khủng đúng không nào! Nhờ có Bubbling, bạn chỉ cần lắng nghe sự kiện tại OuterElement là đủ, bởi khi có sự kiện xảy ra trên bất cứ element con-cháu đều được bubble ra bên ngoài.

➡️ Dùng 1 listener thay vì hàng trăm, tiết kiệm tài nguyên!

Làm sao để ngăn chặn sự kiện Bubbling?

event.stopPropagation();

Sử dụng stopPropagation() giúp sự kiện của bạn chỉ xảy ra trên button

🔗 JS

pic4.png

Event.Target vs Event.CurrentTaget

Cả event.targetevent.currentTarget đều là thuộc tính của đối tượng sự kiện (Event object), nhưng chúng trỏ đến phần tử khác nhau tùy vào ai phát sinh sự kiện và ai đang xử lý sự kiện.

🔗 JS pic5.png

Khi người dùng click vào button; ở dòng 1, do nơi xảy ra và nơi lắng nghe sự kiện cùng một element (thẻ button), nên dữ liệu của .target và .currentTarget đều trỏ về thẻ button

Ở dòng 7, sau khi sự kiện click được bubble ra ngoài, lúc này, nơi lắng nghe sự kiện được gắn trên thẻ div#inner nên giá trị của .target và .currentTarget khác nhau

pic6.png

Tóm tắt

Event Bubbling là một cơ chế giúp cho sự kiện xảy ra ở một element có thể lan tỏa ra các cấp element chứa nó, từ đó giúp lập trình viên có thể dễ dàng lắng nghe sự kiện tại Element Cha.

  • event.stopPropagation() giúp ngăn chặn cơ chế Event Bubbling.
  • event.target: trỏ đến element - nơi xảy ra sự kiện
  • event.currentTarget: trỏ đến element - nơi lắng nghe sự kiện

Bình luận

Bài viết tương tự

- vừa được xem lúc

Route in Angular JS

Router là một module được đặt tại @angular/router, cung cấp cho ứng dụng Angluar của chúng ta khả năng điều hướng và hiển thị nội dung phù hợp với địa chỉ URL. Với các ứng dụng web thông thường, việc điều hướng theo URL thường sẽ do phía server đảm nhiệm, giống như hình ảnh dưới đây là ví dụ với Rai

0 0 101

- vừa được xem lúc

Có gì mới trong Angular 11

Phiên bản Angular 11.0.0 được phát hành vào tháng 11 năm 2020. Bản phát hành chính Angular 11 cung cấp các bản cập nhật trên toàn bộ nền tảng, bao gồm CLI và các components.

0 0 108

- vừa được xem lúc

Pipe trong Angular

Xin chào tất cả mọi người, bài viết này minh xin giới thiệu về Pipe trong Angular, rất mong được mọi người theo dõi. 1) Pipe trong Angular là gì. . .

0 0 135

- vừa được xem lúc

Angular Reactive Forms: Cách sử dụng FormArray

Trong bài viết này chúng ta sẽ tìm hiểu khi nào và cách sử dụng FormArray, cả trong Component và trong Template, ngoài ra chúng ta sẽ xem cách để custom validation cho nó. Vì sao chúng ta cần sử dụng FormArray.

0 0 109

- vừa được xem lúc

RxJS và Reactive Programming

1 - Stream. Streams are a sequence of values over time.

0 0 363

- vừa được xem lúc

Mapping class Java với Angular Typescript model – Chưa bao giờ dễ đến thế

Xin chào mọi người hôm nay mình giới thiệu một loại đồ chơi cực xịn cực hay ho luôn, đây là một thư viện giúp cho mọi người tạo ra 1 class Typescript trong dự án Frontend ở đây mình lấy ví dụ là Angul

0 0 97