Trình xử lý sự kiện là gì?

Trình xử lý sự kiện là một hàm trong JavaScript, chờ sự kiện xảy ra và sau đó phản hồi sự kiện. JavaScript là ngôn ngữ lập trình được nhà phát triển sử dụng để tạo trang web tương tác. Hàm trình xử lý sự kiện của JavaScript cho phép bạn tạo phản hồi tùy chỉnh cho các sự kiện như nhấp chuột, bấm bàn phím và thay đổi kích thước cửa sổ. Mô hình lập trình chờ và phản hồi các sự kiện theo thời gian thực được gọi là xử lý sự kiện.

Tìm hiểu về JavaScript »

Cú pháp của hàm trình xử lý sự kiện là gì?

Hàm trình xử lý sự kiện có chung các đặc điểm tương tự như các hàm JavaScript khác. Khi được kích hoạt, hàm này thực hiện thao tác cần thiết để xử lý sự kiện. Ví dụ, hàm trình xử lý sự kiện có thể thay đổi văn bản được hiển thị, thu thập thông tin từ các biểu mẫu đăng ký hoặc lưu trữ dữ liệu trong cơ sở dữ liệu. 

Cú pháp trình xử lý sự kiện

Một hàm trình xử lý sự kiện tuân theo cú pháp JavaScript thích hợp, như trong ví dụ tiếp theo sau đây.

function RespondMouseClick() {

            document.getElementById("textdisplay1").innerHTML += "MouseClick happened" ;

        }

Ví dụ này minh họa cho hàm trình xử lý sự kiện RespondMouseClick. Thông thường có thể viết tên hàm để phản ánh mục đích của trình xử lý sự kiện. Trong hàm, bạn viết mã để thực hiện các thao tác cụ thể khi sự kiện xảy ra. Trong ví dụ này, hàm nối thêm dữ liệu văn bản MouseClick xảy ra với phần tử HTML textdisplay1

Cú pháp trình xử lý sự kiện

Ngoài ra, bạn có thể sử dụng một hàm trình xử lý sự kiện để phản hồi sự kiện được kích hoạt, như trong ví dụ sau. 

hàm eventHandler(event) {

  if (event.type === "fullscreenchange") {

console.log (“chuyển đổi toàn màn hình”);

  } else {

  console.log (“lỗi toàn màn hình”);

  }

}

Điều này cho phép bạn quản lý một số loại sự kiện từ một phần tử cụ thể bằng một hàm.

Ví dụ, bạn có thể đăng ký một trình xử lý sự kiện để xử lý tất cả các loại sự kiện blockchain trên các ứng dụng dựa trên sự kiện. Để biết thêm thông tin, hãy đọc về cách xây dựng ứng dụng dựa trên sự kiện với Blockchain được quản lý của Amazon.

Bạn có thể thêm trình xử lý sự kiện bằng cách nào?

Một trình xử lý sự kiện sẽ chỉ được kích hoạt sau khi bạn thêm nó vào phần tử JavaScript tương ứng. Để làm điều đó, bạn có thể sử dụng cú pháp như sau:

  • element.addEventListener(event, listener);
  • element.addEventListener(event, listener, useCapture);
  • element.addEventListener(event, listener, options);

Ví dụ, các nhà phát triển có thể gọi hàm sau để liên kết trình xử lý sự kiện nhấp chuột với một phần tử nút. 

btn.addEventListener("nhấp", RespondMouseClick);

Bạn cũng có thể thêm nhiều trình xử lý sự kiện vào một đối tượng sự kiện cụ thể mà không cần ghi đè lên trình xử lý sự kiện hiện có.

Ví dụ, Amazon Web Services (AWS) cho phép các nhà phát triển liên kết nhiều hàm callback trên đối tượng AWS.Request. Để biết thêm thông tin, hãy đọc hướng dẫn sử dụng trình xử lý sự kiện đối tượng yêu cầu trên AWS.

Tham số để thêm các sự kiện

Dưới đây là lời giải thích về các tham số trong cú pháp trước đó:

  • Tham số sự kiện là bất kỳ sự kiện JavaScript hợp lệ nào, chẳng hạn như nhấp chuột, thay đổi, di chuột, nhấn phím và tải. 
  • Tham số trình xử lý sự kiện là hàm callback sự kiện hoặc hàm JavaScript được tạo ra để đáp ứng các sự kiện cụ thể. 
  • Tham số useCapture là tham số tùy chọn cho biết chế độ lan truyền sự kiện. Tham số này chấp nhận các giá trị Boolean, trong đó true activates nắm bắt trong khi false kích hoạt sủi bọt. Giá trị mặc định của tham số này được đặt thành false
  • Tham số tùy chọn bao gồm một số giá trị tùy chọn, bao gồm cơ chế nắm bắt và tín hiệu từ chối, đại diện cho hành vi của trình xử lý sự kiện. 

Làm thế nào để bạn loại bỏ một trình xử lý sự kiện?

Trình xử lý sự kiện vẫn hoạt động cho đến khi bạn loại bỏ chúng khỏi các phần tử JavaScript liên quan. Bạn có thể sử dụng cú pháp sau đây để làm như vậy.

element.removeEventListener(type, listener, useCapture);

Thông số loại bỏ trình xử lý sự kiện tương tự như những tham số mà bạn sử dụng để thêm trình xử lý sự kiện. Khi bạn loại bỏ một trình xử lý sự kiện, bạn phải xác định cùng một loại, trình xử lý sự kiện và các tham số useCapture. Nếu không, trình xử lý sự kiện sẽ vẫn hoạt động và tiếp tục kích hoạt các sự kiện trong tương lai.

Ví dụ, bạn có thể thêm một sự kiện với mã sau đây.

nút.addEventListener("nhấp", RespondMouseClick, true);

Nhưng việc áp dụng mã sau không thể loại bỏ trình xử lý sự kiện. Đó là vì giá trị useCapture khác với giá trị được đăng ký với đối tượng nút. 

nút.removeEventListener("nhấp", RespondMouseClick, false);

Để loại bỏ thành công sự kiện và ngăn chặn kích hoạt sự kiện, bạn có thể sử dụng mã sau đây.

nút.removeEventListener("nhấp", RespondMouseClick, true);

Các hàm của trình xử lý sự kiện lồng nhau hoạt động như thế nào?

Trình xử lý sự kiện lồng nhau là trình xử lý sự kiện được thêm vào các phần tử HTML tại các lớp phân cấp khác nhau.

Trong ví dụ HTML sau đây, tài liệu sở hữu phần tử cha cơ bản, trong khi phần tử cha sở hữu phần tử con. 

<div class="document">

<div class="parent">

<div class="child"></div>

</div>

</div>

Các ứng dụng web phức tạp có thể có nhiều lớp cha-con với các hàm của trình xử lý sự kiện tương ứng. Khi một sự kiện cụ thể xảy ra sẽ làm kích hoạt trình xử lý sự kiện tại các lớp khác nhau theo trình tự cụ thể. Ví dụ, khi nhấp vào nút con sẽ truyền sự kiện đến tất cả các trình xử lý mà nắm bắt cú nhấp chuột.

Các sự kiện có thể lan truyền theo hai cơ chế—sủi bọt và nắm bắt. 

Sủi bọt sự kiện

Sủi bọt là cơ chế mặc định của xử lý sự kiện JavaScript. Cơ chế này lan truyền sự kiện từ lớp trong cùng đến lớp ngoài cùng.

Ví dụ, một người dùng có thể di chuột qua một ô văn bản trong phần con. Sau đó, ứng dụng có thể truyền sự kiện theo thứ tự sau:

  1. Trình xử lý sự kiện trong phần tử con sẽ xử lý sự kiện di chuột. 
  2. Sau đó, trình xử lý sự kiện trong phần tử cha sẽ xử lý sự kiện và chuyển quyền kiểm soát cho trình xử lý sự kiện của tài liệu. 

Để thiết lập cơ chế sủi bọt sự kiện, hãy sử dụng cú pháp sau đây:

  • element.addEventListener(event, listener, [false]);
  • element.addEventListener(event, listener);

Nắm bắt sự kiện

Nắm bắt sự kiện là cơ chế xử lý sự kiện đặc biệt trong JavaScript nơi sự kiện lan truyền vào trong từ lớp ngoài cùng. Khi sự kiện đạt đến phần tử đích ở lớp bên trong, cơ chế xử lý sự kiện sẽ thay đổi thành sủi bọt. Sau đó, cơ chế sủi bọt lan truyền sự kiện ra ngoài đến lớp trên cùng.

Ví dụ, người dùng có thể nhấp vào nút con và bắt đầu trình tự sau:

  1. Trình xử lý sự kiện của tài liệu xử lý sự kiện nhấp chuột, tiếp theo là trình xử lý sự kiện của phần tử cha.
  2. Sự kiện này đạt đến phần tử đích, đó là nút. Trình xử lý sự kiện của nút sẽ xử lý sự kiện.
  3. Quá trình xử lý sự kiện chuyển từ cơ chế nắm bắt sang cơ chế sủi bọt.
  4. Sự kiện nhấp chuột tương tự kích hoạt trình xử lý sự kiện tại phần tử cha trước khi kết thúc tại tài liệu.

Cách chọn giữa cơ chế sủi bọt và cơ chế nắm bắt

Cơ chế sủi bọt và nắm bắt cho phép bạn xử lý các sự kiện khác nhau. Cơ chế sủi bọt hiếm khi được sử dụng vì cơ chế nắm bắt đủ để xử lý hầu hết các sự kiện trong các ứng dụng.

Khi bạn quyết định chọn giữa cơ chế sủi bọt và nắm bắt, bạn nên xem xét dòng làn truyền sự kiện và mức độ phù hợp với logic lập trình trong ứng dụng của bạn. 

Ví dụ, hãy xem xét một biểu mẫu cha bao gồm hai phần tử con. Phần tử đầu tiên yêu cầu cập nhật ngay lập tức khi một sự kiện xảy ra tại phần tử thứ hai. Trong trường hợp này, bạn nên sử dụng cơ chế nắm bắt. Cơ chế này đảm bảo rằng trình xử lý sự kiện tại phần tử cha xử lý sự kiện và cập nhật phần tử đầu tiên. Sau đó, cơ chế chuyển quyền kiểm soát cho trình xử lý sự kiện tại phần tử con thứ hai. 

Bạn có thể ngăn chặn sự kiện lan truyền trong các hàm của trình xử lý sự kiện lồng nhau bằng cách nào?

Các sự kiện lan truyền cho đến khi đi đến điểm đích cuối cùng trong sắp xếp trình xử lý sự kiện lồng nhau. Bạn phải sử dụng các phương pháp cụ thể để ngăn chặn sự kiện lan truyền thêm.

Phương pháp sau đây ngăn sự kiện tại trình xử lý sự kiện.

event.stopPropagation();

Ví dụ, nếu bạn yêu cầu StopPropagation tại nút con, sự kiện nhấp chuột sẽ không truyền đến cấp cha và cấp tài liệu. Do đó, trình xử lý sự kiện ở mức cao hơn sẽ không được kích hoạt. 

Ngăn chặn tất cả sự kiện lan truyền

StopPropagation chỉ ngăn chặn loại sự kiện hiện tại lan truyền. Nếu đối tượng có các loại trình xử lý sự kiện khác nhau đăng ký, chúng vẫn kích hoạt mặc dù có yêu cầu StopPropagation.

Để ngăn chặn tất cả các sự kiện liên quan đến một đối tượng cụ thể, bạn có thể sử dụng phương pháp StopImmediatePropagation, như sau. 

 event.stopImmediatePropagation();

Khi một trình xử lý sự kiện yêu cầu StopImmediatePropagation, không có trình xử lý sự kiện nào khác liên kết với đối tượng được kích hoạt.

AWS có thể hỗ trợ các yêu cầu JavaScript của bạn như thế nào?

Amazon Web Services (AWS) cung cấp AWS SDK for JavaScript để bạn có thể dễ dàng sử dụng dịch vụ trong các ứng dụng của mình với thư viện và API.

Bạn có thể sử dụng SDK để phát triển các ứng dụng phía máy chủ, ứng dụng web và ứng dụng web dùng trên thiết bị di động. SDK hỗ trợ thời gian hoạt động JavaScript, Node.JS và React Native, cũng như thời gian hoạt động chéo. Điều này cho phép các nhà phát triển chạy cùng một gói dịch vụ máy khách trên các nền tảng khác nhau.

Dưới đây là những lợi ích khác của việc sử dụng SDK:

  • SDK được viết bằng TypeScript. Điều này đem lại các lợi ích như kiểm tra kiểu tĩnh và hỗ trợ lớp và mô-đun.
  • SDK cung cấp tập hợp phần mềm trung gian cho phép bạn thực hiện các thao tác tùy chỉnh.
  • SDK có kiến trúc mô-đun. Điều này cho phép bạn chỉ sử dụng các gói cần thiết để tối ưu hóa hiệu suất của ứng dụng.

Hãy bắt đầu sử dụng các ứng dụng JavaScript bằng cách đăng ký tài khoản AWS ngay hôm nay.

Các bước tiếp theo trên AWS

Tham khảo các tài nguyên bổ sung liên quan đến sản phẩm
Tham khảo Dịch vụ công cụ dành cho nhà phát triển 
Đăng ký tài khoản miễn phí

Nhận ngay quyền sử dụng Bậc miễn phí của AWS.

Đăng ký 
Bắt đầu xây dựng trong bảng điều khiển

Bắt đầu xây dựng trong AWS Management Console.

Đăng nhập