[JQuery] Bind Event Cho Những Element Chưa Tồn Tại - Chép's Blog
Có thể bạn quan tâm
Bài viết này chia sẻ cách bind event cho những element chưa tồn tại (hay được sinh ra sau đó) bằng khái niệm Event Delegation.

Trong jQuery, mỗi đối tượng đều có một số lượng event nhất định, và đây là cách mà ta vẫn thường dùng để bind event:
$(".btn").click(function() {} // Do something here... }); $("#myDropdown").change(function() {} // Do something here... });Với cách làm này, jQuery sẽ bind các event này vào các element trong selector (trong ví dụ này là các element có class btn và id myDropdown). Tuy nhiên, 1 chút rắc rối sẽ xảy ra khi…
Ví dụ 1: Button thứ 2 “Second Button” được thêm vào sau. Khi click vào “Second Button”, không có gì xảy ra hết dù nó có cùng class “btn” với “First Button” (Event click được bind cho class btn).
HTML:
<button class="btn">First Button</button>JavaScript:
// Clicking on a button (with class "btn") will alert it's text $(".btn").click(function() { alert($(this).html()); }); $("body").append("<button class='btn'>Second Button</button>");JSFIDDLE DEMO
Why Why Why???
Nguyên nhân to bự: Vào thời điểm event được bind, chỉ những element nào ứng với selector mới “nhận được” event đó. Còn những element được sinh ra khi đã “quá mùa” binding đương nhiên…nhịn.
Tóm lại là: chỉ những element đang tồn tại ở thời điểm event được bind mới nhận được event đó. Các element được thêm vào sau thì không.
Làm sao bây giờ?
Trong jQuery có 1 method là .on() có khả năng bind mọi event của mọi element; cách dùng cũng đơn giản, khá giống ví dụ ban nãy:
Syntax:
$(selector).on(eventName, function);Ví dụ:
$(".btn").on("click", function() {} // Do something here... }); $("#myDropdown").on("change", function() {} // Do something here... });Method .on() có nhiều công dụng như:
- Default, y chang ví dụ 1. Thực ra .click() là cách dùng rút gọn của .on(“click”)
- Bind nhiều event vào cùng 1 event handler
- Bind nhiều event và nhiều handlers vào 1 selectors
- Bind event từ method .trigger()
- V.v…
Tuy nhiên trong bài này, ta chỉ cần tìm hiểu 1 chức năng của .on() cho phép bind event cho những element chưa tồn tại, gọi là Event Delegation.
Vậy, Event Delegation là gì?
Event Delegation cho phép bind event vào 1 element cha. Event này sẽ được kích hoạt cho các element “con cháu” ứng với selector, bất chấp đống “con cháu” đó hiện đang tồn tại hay sẽ được thêm vào sau.
Syntax:
$(parentSelector).on(eventName, descendantSelector, function);Ví dụ 2: Button thứ 2 “Second Button” được thêm vào sau nhưng vẫn được bind event “click”.
JavaScript:
// Clicking on a button (with class "btn") will alert it's text $("body").on("click", ".btn", function() { alert($(this).html()); });JSFIDDLE CODE
Ở đây, parentSelector làm nhiệm vụ “hứng” dùm event, khi “con cháu” của nó được kích hoạt ứng với event đó, event sẽ được khởi chạy.
Một vài lưu ý khi sử dụng Event Delegation
- Hạn chế sử dụng các parent selector “to bự” như document, body, html.
Scope quá lớn sẽ khiến bạn gặp nhiều phiền phức khi có quá nhiều event giống nhau được bind vào document hay body. Hãy sử dụng 1 parent selector “to vừa đủ”.
<div id="myContainer"> <button class="btn">First Button</button> </div> $("#myContainer").on("click", ".btn", function() {});- Parent selector phải là cố định từ đầu nhé, chứ nó mà cũng sinh sau đẻ muộn thì còn “hứng” dùm ai được nữa =.=’
- Selector thứ 2 trong method này được dùng từ “descendants”, NOT “children”, tức là cả con cái lẫn cháu chắt của parent selector đều có thể được bind event.
– HẾT –
Cám ơn các bạn đã theo dõi bài viết.
Share this:
- X
Related
Từ khóa » Hàm Bind() Trong Jquery Có Tác Dụng Gì
-
.bind() | Hàm JQuery | Tham Khảo JQuery | Học Web Chuẩn
-
Sự Khác Nhau Giữa Function Live() Và Bind() Trong JQuery. - TEDU
-
Hiểu Hơn Về Hàm Bind() Trong Javascript - Freetuts
-
Bind, Apply And Call Trong Javascript - Viblo
-
Ngăn Chặn Bind Sự Kiện Nhiều Lần Trong JQuery - Viblo
-
Xử Lý Sự Kiện Trong JQuery
-
Bind (Attach) Event Handler Với Phần Tử HTML Động Trong JQuery
-
Việc Sử Dụng Phương Thức JavaScript 'bind' Là Gì? - HelpEx
-
Sự Khác Biệt Giữa Các Hàm `click`,` Bind`, `live`,` ủy Nhiệm`, `trigger ...
-
Sự Kiện Trong Jquery - Thầy Long Web
-
Học JQuery Căn Bản: Tìm Hiểu Event (Sự Kiện)
-
Xử Lý Sự Kiện Trong JQuery - Vay Tiền Online Bằng CMND
-
JQuery Events – Cơ Bản Về Sự Kiện Trong JQuery | Quyetdo289's Blog
-
Bind Các Event Handler Trong JQuery - Chiasethongtin.COM