E => trong javascript là gì?

Tương tác của JavaScript với HTML được xử lý thông qua các sự kiện xảy ra khi người dùng hoặc trình duyệt thao tác trên trang

Khi trang tải, nó được gọi là một sự kiện. Khi người dùng nhấp vào một nút, lần nhấp đó cũng là một sự kiện. Các ví dụ khác bao gồm các sự kiện như nhấn phím bất kỳ, đóng cửa sổ, thay đổi kích thước cửa sổ, v.v.

Các nhà phát triển có thể sử dụng các sự kiện này để thực thi các phản hồi được mã hóa JavaScript, khiến các nút đóng cửa sổ, thông báo được hiển thị cho người dùng, dữ liệu được xác thực và hầu như bất kỳ loại phản hồi nào khác có thể tưởng tượng được

Sự kiện là một phần của Mô hình đối tượng tài liệu (DOM) Cấp 3 và mọi phần tử HTML đều chứa một tập hợp các sự kiện có thể kích hoạt Mã JavaScript

Vui lòng xem qua hướng dẫn nhỏ này để hiểu rõ hơn Tham khảo sự kiện HTML. Ở đây chúng ta sẽ thấy một vài ví dụ để hiểu mối quan hệ giữa Sự kiện và JavaScript -

onclick Loại sự kiện

Đây là loại sự kiện được sử dụng thường xuyên nhất xảy ra khi người dùng nhấp vào nút bên trái của chuột. Bạn có thể đặt xác nhận, cảnh báo, v.v. , đối với loại sự kiện này

Ví dụ

Hãy thử ví dụ sau

      
            
   
   
   
      

Click the following button and see result

đầu ra

onsubmit Loại sự kiện

onsubmit là sự kiện xảy ra khi bạn cố gắng gửi biểu mẫu. Bạn có thể đặt xác thực biểu mẫu của mình đối với loại sự kiện này

Ví dụ

Ví dụ sau đây cho thấy cách sử dụng onsubmit. Ở đây chúng tôi đang gọi một hàm validate() trước khi gửi dữ liệu biểu mẫu tới máy chủ web. Nếu hàm validate() trả về true thì form sẽ được gửi, ngược lại sẽ không gửi dữ liệu

Hãy thử ví dụ sau

      
            
   
   
      
      
         .......
         
            
   

onmouseover và onmouseout

Hai loại sự kiện này sẽ giúp bạn tạo hiệu ứng đẹp mắt với hình ảnh hoặc thậm chí cả với văn bản. Sự kiện onmouseover kích hoạt khi bạn đưa chuột qua bất kỳ phần tử nào và onmouseout kích hoạt khi bạn di chuyển chuột ra khỏi phần tử đó. Hãy thử ví dụ sau

      
            
   
   
   
      

Bring your mouse inside the division to see the result:

This is inside the division

đầu ra

Sự kiện tiêu chuẩn HTML 5

Các sự kiện HTML 5 tiêu chuẩn được liệt kê ở đây để bạn tham khảo. Tập lệnh ở đây chỉ ra một chức năng Javascript sẽ được thực thi đối với sự kiện đó

Khi lần đầu tiên tôi học những kiến ​​thức cơ bản về JavaScript, tôi đã không được nói về chữ "e" mà bạn thường thấy được truyền dưới dạng tham số trong các hàm

Tuy nhiên, tôi đã tiếp tục tìm hiểu về framework của WordPress, PHP, v.v. , bắt đầu làm công việc mã hóa cho một vài công ty, và thỉnh thoảng, khi đang thực hiện một dự án, tôi sẽ thấy chữ e nhỏ đó ở đâu đó trong một kịch bản

Tôi nghĩ, "Cái e đó nghĩa là gì trong JavaScript và jQuery?"

Trong một thời gian tôi chỉ bỏ qua nó

Nhưng cuối cùng tôi đã dành thời gian để tra cứu nó, và nó là một vật nhỏ rất, rất nhiều thông tin và hữu ích

Nếu bạn tìm kiếm trên Google, bạn sẽ tìm thấy nhiều giải thích và hướng dẫn để giúp bạn hiểu

Bất chấp điều đó, tôi đã quyết định thêm vào dòng sản phẩm một video ngắn gọn, đơn giản về đối tượng sự kiện này, các thuộc tính của nó và cách nó có thể trở thành một công cụ rất hữu ích để nắm bắt

cuốn sách này đã giúp tôi hiểu rõ hơn về các khái niệm thao tác dom và javascript thuần túy, chẳng hạn như các sự kiện, một số giải thích hay nhất mà tôi đã tìm thấy ở đây và nó cũng là một hướng dẫn trực quan tốt

THẬT SỰ

Tôi có ấn bản đầu tiên cho HTML và CSS và tôi YÊU nó. THỰC SỰ đã giúp tôi. Đó là cuốn sách mật mã đầu tiên của tôi. Cách họ phá vỡ các khái niệm thật tuyệt vời. Và tôi là một người học trực quan, vì vậy tính thẩm mỹ của cuốn sách đã thực sự giúp ích cho tôi

Tôi đã định mua cuốn sách này nhưng khi xem các bài đánh giá, tôi đã chọn Head First Javascript (điều này tốt nhưng không đơn giản và mất HÀNG TẤN đường vòng)

Mọi người đang nói rằng cuốn sách đã lỗi thời và có thể làm bạn bối rối nếu bạn đang cố học Javascript hiện đại. Bạn có cảm thấy rằng đó có thể là một vấn đề?

Sự kiện là các hành động hoặc sự kiện xảy ra trong hệ thống mà bạn đang lập trình, mà hệ thống sẽ cho bạn biết để mã của bạn có thể phản ứng với chúng

Ví dụ: nếu người dùng nhấp vào nút trên trang web, bạn có thể muốn phản ứng lại hành động đó bằng cách hiển thị hộp thông tin. Trong bài viết này, chúng tôi thảo luận về một số khái niệm quan trọng xung quanh sự kiện và xem cách chúng hoạt động trong trình duyệt. Đây sẽ không phải là một nghiên cứu toàn diện;

điều kiện tiên quyết. Trình độ máy tính cơ bản, hiểu biết cơ bản về HTML và CSS, các bước đầu tiên của JavaScript. Khách quan. Để hiểu lý thuyết cơ bản về các sự kiện, cách chúng hoạt động trong trình duyệt và cách các sự kiện có thể khác nhau trong các môi trường lập trình khác nhau

Như đã đề cập ở trên, các sự kiện là các hành động hoặc sự cố xảy ra trong hệ thống mà bạn đang lập trình — hệ thống tạo ra (hoặc "kích hoạt") một loại tín hiệu nào đó khi một sự kiện xảy ra và cung cấp một cơ chế để có thể tự động thực hiện một hành động ( . Các sự kiện được kích hoạt bên trong cửa sổ trình duyệt và có xu hướng được gắn vào một mục cụ thể nằm trong đó. Đây có thể là một phần tử, một tập hợp các phần tử, tài liệu HTML được tải trong tab hiện tại hoặc toàn bộ cửa sổ trình duyệt. Có nhiều loại sự kiện khác nhau có thể xảy ra

Ví dụ

  • Người dùng chọn, nhấp hoặc di con trỏ qua một phần tử nhất định
  • Người dùng chọn một phím trên bàn phím
  • Người dùng thay đổi kích thước hoặc đóng cửa sổ trình duyệt
  • Một trang web tải xong
  • Một biểu mẫu được gửi
  • Video được phát, tạm dừng hoặc kết thúc
  • Xảy ra lỗi

Bạn có thể thu thập từ điều này (và từ việc xem qua tham chiếu sự kiện MDN) rằng có rất nhiều sự kiện có thể được kích hoạt

Để phản ứng với một sự kiện, bạn đính kèm một trình xử lý sự kiện cho nó. Đây là một khối mã (thường là hàm JavaScript mà bạn với tư cách là lập trình viên tạo) chạy khi sự kiện kích hoạt. Khi một khối mã như vậy được xác định để chạy để phản hồi lại một sự kiện, chúng tôi nói rằng chúng tôi đang đăng ký một trình xử lý sự kiện. Ghi chú. Trình xử lý sự kiện đôi khi được gọi là trình xử lý sự kiện — chúng có thể thay thế cho nhau theo mục đích của chúng tôi, mặc dù nói đúng ra, chúng hoạt động cùng nhau. Người nghe lắng nghe sự kiện đang xảy ra và trình xử lý là mã được chạy để phản hồi lại sự kiện đang xảy ra

Ghi chú. Các sự kiện web không phải là một phần của ngôn ngữ JavaScript cốt lõi — chúng được định nghĩa là một phần của các API được tích hợp trong trình duyệt

Hãy xem xét một ví dụ đơn giản về những gì chúng tôi muốn nói ở đây. Trong ví dụ sau, chúng tôi có một

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
2 duy nhất, khi được nhấn sẽ làm cho nền thay đổi thành màu ngẫu nhiên

<button>Change color</button>

button {
  margin: 10px;
}

JavaScript trông giống như vậy

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});

Trong đoạn mã này, chúng tôi lưu trữ một tham chiếu đến phần tử

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
2 bên trong một hằng số có tên là
const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
4, sử dụng hàm
const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
5

Chúng tôi cũng định nghĩa một hàm trả về một số ngẫu nhiên

Phần thứ ba của mã là nơi chúng tôi xác định và đăng ký trình xử lý sự kiện. Phần tử

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
2 có một sự kiện tên là
const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
7 kích hoạt khi người dùng nhấp vào nút. Các đối tượng có thể kích hoạt các sự kiện có một phương thức
const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
8, có ít nhất hai đối số. tên của sự kiện và một chức năng để xử lý sự kiện. Vì vậy, chúng tôi gọi phương thức
const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
8 của nút, chuyển vào

  • chuỗi
    const btn = document.querySelector('button');
    
    function random(number) {
      return Math.floor(Math.random() * (number+1));
    }
    
    function changeBackground() {
      const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
      document.body.style.backgroundColor = rndCol;
    }
    
    btn.addEventListener('click', changeBackground);
    
    7, để cho biết rằng chúng tôi muốn lắng nghe sự kiện nhấp chuột
  • một chức năng để gọi khi sự kiện xảy ra. Trong trường hợp của chúng tôi, chức năng tạo ra một màu RGB ngẫu nhiên và đặt trang
    btn.removeEventListener('click', changeBackground);
    
    1
    btn.removeEventListener('click', changeBackground);
    
    2 bằng màu đó

Đầu ra ví dụ như sau. Hãy thử bấm vào nút

Các sự kiện không phải là duy nhất đối với JavaScript — hầu hết các ngôn ngữ lập trình đều có một số loại mô hình sự kiện và cách hoạt động của mô hình này thường khác với cách của JavaScript. Trên thực tế, mô hình sự kiện trong JavaScript cho các trang web khác với mô hình sự kiện cho JavaScript vì nó được sử dụng trong các môi trường khác

Ví dụ, nút. js là một thời gian chạy JavaScript rất phổ biến cho phép các nhà phát triển sử dụng JavaScript để xây dựng các ứng dụng phía máy chủ và mạng. nút. mô hình sự kiện js dựa vào các bộ lắng nghe để lắng nghe các sự kiện và các bộ phát để phát ra các sự kiện theo định kỳ — nghe có vẻ không khác lắm, nhưng mã hoàn toàn khác, sử dụng các chức năng như

btn.removeEventListener('click', changeBackground);
3 để đăng ký một bộ lắng nghe sự kiện và
btn.removeEventListener('click', changeBackground);
4 để đăng ký một sự kiện . Cung cấp một ví dụ tốt

Bạn cũng có thể sử dụng JavaScript để xây dựng các tiện ích bổ sung trên nhiều trình duyệt — cải tiến chức năng của trình duyệt — sử dụng công nghệ có tên là WebExtensions. Mô hình sự kiện tương tự như mô hình sự kiện trên web, nhưng hơi khác một chút — các thuộc tính của trình xử lý sự kiện được đặt trong vỏ lạc đà (chẳng hạn như

btn.removeEventListener('click', changeBackground);
5 thay vì
btn.removeEventListener('click', changeBackground);
6) và cần được kết hợp với hàm
btn.removeEventListener('click', changeBackground);
7. Xem trang để biết ví dụ

Bạn không cần phải hiểu gì về những môi trường khác như vậy ở giai đoạn này trong quá trình học tập của mình;

Cơ chế khuyến nghị để thêm trình xử lý sự kiện vào trang web là phương thức

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
8

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});

Ghi chú. Bạn có thể tìm mã nguồn đầy đủ cho ví dụ này trên GitHub (cũng có thể xem nó đang chạy trực tiếp)

Bên trong hàm

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
8, chúng tôi chỉ định hai tham số. tên của sự kiện mà chúng tôi muốn đăng ký trình xử lý này và mã bao gồm hàm xử lý mà chúng tôi muốn chạy để phản hồi lại nó

Bạn có thể đặt chức năng xử lý thành một chức năng được đặt tên riêng, như thế này

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);

Có nhiều sự kiện khác nhau có thể được kích hoạt bởi một phần tử nút. hãy thử nghiệm

Đầu tiên, tạo một bản sao cục bộ của Random-color-addeventlistener. html và mở nó trong trình duyệt của bạn. Nó chỉ là một bản sao của ví dụ màu ngẫu nhiên đơn giản mà chúng ta đã thử. Bây giờ hãy thử lần lượt thay đổi

const controller = new AbortController();

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}, { signal: controller.signal }); // pass an AbortSignal to this handler
1 thành các giá trị khác nhau sau đây và quan sát kết quả trong ví dụ

  • const controller = new AbortController();
    
    btn.addEventListener('click', () => {
      const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
      document.body.style.backgroundColor = rndCol;
    }, { signal: controller.signal }); // pass an AbortSignal to this handler
    
    2 và
    const controller = new AbortController();
    
    btn.addEventListener('click', () => {
      const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
      document.body.style.backgroundColor = rndCol;
    }, { signal: controller.signal }); // pass an AbortSignal to this handler
    
    3 — Màu thay đổi khi nút được lấy nét và không lấy nét; . Chúng thường được sử dụng để hiển thị thông tin về việc điền vào các trường biểu mẫu khi chúng được đặt tiêu điểm hoặc để hiển thị thông báo lỗi nếu một trường biểu mẫu được điền bằng một giá trị không chính xác
  • const controller = new AbortController();
    
    btn.addEventListener('click', () => {
      const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
      document.body.style.backgroundColor = rndCol;
    }, { signal: controller.signal }); // pass an AbortSignal to this handler
    
    4 — Màu chỉ thay đổi khi nhấp đúp vào nút
  • const controller = new AbortController();
    
    btn.addEventListener('click', () => {
      const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
      document.body.style.backgroundColor = rndCol;
    }, { signal: controller.signal }); // pass an AbortSignal to this handler
    
    5 và
    const controller = new AbortController();
    
    btn.addEventListener('click', () => {
      const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
      document.body.style.backgroundColor = rndCol;
    }, { signal: controller.signal }); // pass an AbortSignal to this handler
    
    6 — Màu thay đổi tương ứng khi con trỏ chuột di chuyển qua nút hoặc khi con trỏ di chuyển ra khỏi nút

Một số sự kiện, chẳng hạn như

const controller = new AbortController();

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}, { signal: controller.signal }); // pass an AbortSignal to this handler
1, có sẵn trên hầu hết mọi phần tử. Những người khác cụ thể hơn và chỉ hữu ích trong những tình huống nhất định. ví dụ: sự kiện
const controller = new AbortController();

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}, { signal: controller.signal }); // pass an AbortSignal to this handler
8 chỉ khả dụng trên một số phần tử, chẳng hạn như
const controller = new AbortController();

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}, { signal: controller.signal }); // pass an AbortSignal to this handler
9

Nếu bạn đã thêm trình xử lý sự kiện bằng cách sử dụng

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
8, bạn có thể xóa lại trình xử lý sự kiện đó bằng phương thức
controller.abort(); // removes any/all event handlers associated with this controller
1. Ví dụ: điều này sẽ xóa trình xử lý sự kiện
controller.abort(); // removes any/all event handlers associated with this controller
2

btn.removeEventListener('click', changeBackground);

Trình xử lý sự kiện cũng có thể được gỡ bỏ bằng cách chuyển một số

controller.abort(); // removes any/all event handlers associated with this controller
3 đến số
const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
8 và sau đó gọi số
controller.abort(); // removes any/all event handlers associated with this controller
5 trên bộ điều khiển sở hữu số
controller.abort(); // removes any/all event handlers associated with this controller
3. Ví dụ: để thêm một trình xử lý sự kiện mà chúng tôi có thể xóa bằng một
controller.abort(); // removes any/all event handlers associated with this controller
3

const controller = new AbortController();

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}, { signal: controller.signal }); // pass an AbortSignal to this handler

Sau đó, trình xử lý sự kiện được tạo bởi đoạn mã trên có thể được xóa như thế này

controller.abort(); // removes any/all event handlers associated with this controller

Đối với các chương trình nhỏ, đơn giản, việc dọn dẹp các trình xử lý sự kiện cũ, không sử dụng là không cần thiết, nhưng đối với các chương trình lớn hơn, phức tạp hơn, nó có thể cải thiện hiệu quả. Ngoài ra, khả năng loại bỏ các trình xử lý sự kiện cho phép bạn có cùng một nút thực hiện các hành động khác nhau trong các trường hợp khác nhau. tất cả những gì bạn phải làm là thêm hoặc xóa trình xử lý

Bằng cách thực hiện nhiều lệnh gọi tới

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
8, cung cấp các trình xử lý khác nhau, bạn có thể có nhiều trình xử lý cho một sự kiện

myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);

Cả hai chức năng sẽ chạy khi phần tử được nhấp vào

Có các tính năng và tùy chọn mạnh mẽ khác có sẵn với

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
8

Đây là một chút ngoài phạm vi của bài viết này, nhưng nếu bạn muốn đọc chúng, hãy truy cập trang tham khảo

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
8 và
controller.abort(); // removes any/all event handlers associated with this controller
1

Chúng tôi khuyên bạn nên sử dụng

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
8 để đăng ký trình xử lý sự kiện. Đó là phương pháp mạnh mẽ nhất và quy mô tốt nhất với các chương trình phức tạp hơn. Tuy nhiên, có hai cách khác để đăng ký trình xử lý sự kiện mà bạn có thể thấy. thuộc tính trình xử lý sự kiện và trình xử lý sự kiện nội tuyến

Các đối tượng (chẳng hạn như các nút) có thể kích hoạt các sự kiện cũng thường có các thuộc tính có tên là

myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);
3 theo sau là tên của sự kiện. Ví dụ: các phần tử có thuộc tính
myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);
4. Đây được gọi là thuộc tính xử lý sự kiện. Để lắng nghe sự kiện, bạn có thể gán chức năng xử lý cho thuộc tính

Ví dụ: chúng ta có thể viết lại ví dụ về màu ngẫu nhiên như thế này

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.onclick = () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

Bạn cũng có thể đặt thuộc tính trình xử lý thành một hàm được đặt tên

button {
  margin: 10px;
}
0

Với các thuộc tính của trình xử lý sự kiện, bạn không thể thêm nhiều trình xử lý cho một sự kiện. Ví dụ: bạn có thể gọi

myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);
5 trên một phần tử nhiều lần, với các hàm khác nhau được chỉ định trong đối số thứ hai

button {
  margin: 10px;
}
1

Điều này là không thể với các thuộc tính của trình xử lý sự kiện vì mọi nỗ lực đặt thuộc tính sau đó sẽ ghi đè lên các thuộc tính trước đó

button {
  margin: 10px;
}
2

Bạn cũng có thể thấy một mẫu như thế này trong mã của mình

button {
  margin: 10px;
}
3

button {
  margin: 10px;
}
4

Phương pháp đăng ký trình xử lý sự kiện sớm nhất được tìm thấy trên Web có liên quan (hoặc trình xử lý sự kiện nội tuyến) giống như phương pháp được hiển thị ở trên — giá trị thuộc tính theo nghĩa đen là mã JavaScript bạn muốn chạy khi sự kiện xảy ra. Ví dụ trên gọi một hàm được xác định bên trong phần tử

myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);
6 trên cùng một trang, nhưng bạn cũng có thể chèn JavaScript trực tiếp vào bên trong thuộc tính, chẳng hạn

button {
  margin: 10px;
}
5

Bạn có thể tìm thấy thuộc tính HTML tương đương với nhiều thuộc tính xử lý sự kiện; . Việc sử dụng thuộc tính trình xử lý sự kiện có vẻ dễ dàng nếu bạn đang làm một việc gì đó thực sự nhanh chóng, nhưng chúng nhanh chóng trở nên khó quản lý và không hiệu quả

Để bắt đầu, không nên trộn lẫn HTML và JavaScript của bạn, vì nó trở nên khó đọc. Giữ JavaScript của bạn riêng biệt là một phương pháp hay và nếu nó nằm trong một tệp riêng biệt, bạn có thể áp dụng nó cho nhiều tài liệu HTML

Ngay cả trong một tệp, trình xử lý sự kiện nội tuyến không phải là một ý tưởng hay. Một nút thì được, nhưng nếu bạn có 100 nút thì sao? . Với JavaScript, bạn có thể dễ dàng thêm chức năng xử lý sự kiện vào tất cả các nút trên trang bất kể có bao nhiêu nút, bằng cách sử dụng nội dung như thế này

button {
  margin: 10px;
}
6

Cuối cùng, nhiều cấu hình máy chủ phổ biến sẽ không cho phép JavaScript nội tuyến, như một biện pháp bảo mật

Bạn không bao giờ nên sử dụng các thuộc tính trình xử lý sự kiện HTML - những thuộc tính này đã lỗi thời và việc sử dụng chúng là một cách làm không tốt

Đôi khi, bên trong một hàm xử lý sự kiện, bạn sẽ thấy một tham số được chỉ định với tên chẳng hạn như

myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);
7,
myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);
8 hoặc
myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);
9. Đây được gọi là đối tượng sự kiện và nó được tự động chuyển đến trình xử lý sự kiện để cung cấp các tính năng và thông tin bổ sung. Ví dụ: hãy viết lại ví dụ về màu ngẫu nhiên của chúng ta một chút

button {
  margin: 10px;
}
7

Ghi chú. Bạn có thể tìm mã nguồn đầy đủ cho ví dụ này trên GitHub (cũng có thể xem nó đang chạy trực tiếp)

Ở đây bạn có thể thấy chúng tôi đang bao gồm một đối tượng sự kiện, e, trong hàm và trong hàm thiết lập kiểu màu nền trên

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.onclick = () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}
0 — chính là nút này. Thuộc tính
const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.onclick = () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}
1 của đối tượng sự kiện luôn là tham chiếu đến phần tử mà sự kiện xảy ra. Vì vậy, trong ví dụ này, chúng tôi đang đặt màu nền ngẫu nhiên cho nút chứ không phải trang

Ghi chú. Xem phần bên dưới để biết ví dụ nơi chúng tôi sử dụng

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.onclick = () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}
2

Ghi chú. Bạn có thể sử dụng bất kỳ tên nào bạn thích cho đối tượng sự kiện — bạn chỉ cần chọn một tên mà sau đó bạn có thể sử dụng để tham chiếu nó bên trong hàm xử lý sự kiện.

myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);
9/
myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);
8/
myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);
7 được các nhà phát triển sử dụng phổ biến nhất vì chúng ngắn và dễ nhớ. Luôn nhất quán là điều tốt — với chính bạn và với những người khác nếu có thể

Hầu hết các đối tượng sự kiện đều có sẵn một bộ thuộc tính và phương thức tiêu chuẩn trên đối tượng sự kiện;

Một số đối tượng sự kiện thêm các thuộc tính bổ sung có liên quan đến loại sự kiện cụ thể đó. Ví dụ: sự kiện

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.onclick = () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}
7 kích hoạt khi người dùng nhấn một phím. Đối tượng sự kiện của nó là một
const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.onclick = () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}
8, là một đối tượng
const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.onclick = () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}
6 chuyên biệt với thuộc tính
button {
  margin: 10px;
}
00 cho bạn biết phím nào đã được nhấn

button {
  margin: 10px;
}
8

button {
  margin: 10px;
}
9

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
0

Hãy thử nhập vào hộp văn bản và xem đầu ra

Đôi khi, bạn sẽ gặp tình huống mà bạn muốn ngăn một sự kiện thực hiện những gì nó thực hiện theo mặc định. Ví dụ phổ biến nhất là biểu mẫu web, ví dụ: biểu mẫu đăng ký tùy chỉnh. Khi bạn điền thông tin chi tiết và nhấp vào nút gửi, hành vi tự nhiên là dữ liệu sẽ được gửi đến một trang cụ thể trên máy chủ để xử lý và trình duyệt sẽ được chuyển hướng đến một trang "thông báo thành công" nào đó (hoặc

Rắc rối xảy ra khi người dùng gửi dữ liệu không chính xác — với tư cách là nhà phát triển, bạn muốn ngăn việc gửi dữ liệu đến máy chủ và đưa ra thông báo lỗi cho biết có gì sai và cần phải làm gì để khắc phục sự cố. Một số trình duyệt hỗ trợ các tính năng xác thực dữ liệu biểu mẫu tự động, nhưng vì nhiều trình duyệt không hỗ trợ, bạn không nên dựa vào các tính năng đó và thực hiện kiểm tra xác thực của riêng mình. Hãy xem một ví dụ đơn giản

Đầu tiên, một biểu mẫu HTML đơn giản yêu cầu bạn nhập họ và tên của mình

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
1

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
2

Bây giờ là một số JavaScript - ở đây chúng tôi triển khai một kiểm tra rất đơn giản bên trong trình xử lý cho sự kiện

button {
  margin: 10px;
}
01 (sự kiện gửi được kích hoạt trên một biểu mẫu khi nó được gửi) để kiểm tra xem các trường văn bản có trống không. Nếu đúng như vậy, chúng tôi gọi hàm
button {
  margin: 10px;
}
02 trên đối tượng sự kiện — hàm này dừng gửi biểu mẫu — rồi hiển thị thông báo lỗi trong đoạn bên dưới biểu mẫu của chúng tôi để cho người dùng biết có gì sai

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
3

Rõ ràng, đây là cách xác thực biểu mẫu khá yếu — ví dụ: nó sẽ không ngăn người dùng xác thực biểu mẫu bằng dấu cách hoặc số được nhập vào các trường — nhưng nó vẫn ổn cho các mục đích ví dụ. Đầu ra như sau

Ghi chú. Để biết mã nguồn đầy đủ, hãy xem ngăn chặn xác thực mặc định. html (cũng có thể thấy nó đang chạy trực tiếp tại đây)

Bong bóng sự kiện mô tả cách trình duyệt xử lý các sự kiện được nhắm mục tiêu vào các phần tử lồng nhau

Hãy xem xét một trang web như thế này

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
4

Ở đây nút nằm bên trong một phần tử khác, phần tử

button {
  margin: 10px;
}
03. Ta nói rằng phần tử
button {
  margin: 10px;
}
03 ở đây là phần tử cha của phần tử mà nó chứa. Điều gì sẽ xảy ra nếu chúng ta thêm trình xử lý sự kiện nhấp chuột vào nút cha, sau đó nhấp vào nút?

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
5

Bạn sẽ thấy nút cha kích hoạt sự kiện nhấp chuột khi người dùng nhấp vào nút

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
6

Điều này thật ý nghĩa. nút nằm bên trong

button {
  margin: 10px;
}
03, vì vậy khi bạn nhấp vào nút, bạn cũng đang ngầm nhấp vào phần tử nằm bên trong

Điều gì xảy ra nếu chúng ta thêm trình xử lý sự kiện vào nút và cha mẹ?

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
7

Hãy thử thêm các trình xử lý sự kiện nhấp chuột vào nút, phần tử gốc của nó (_______5_______03) và phần tử

btn.removeEventListener('click', changeBackground);
1 có chứa cả hai phần tử đó

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
8

Bạn sẽ thấy rằng cả ba phần tử đều kích hoạt sự kiện nhấp chuột khi người dùng nhấp vào nút

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
9

Trong trường hợp này

  • lần nhấp vào nút sẽ kích hoạt trước
  • tiếp theo là nhấp chuột vào cha mẹ của nó (phần tử
    button {
      margin: 10px;
    }
    
    03)
  • theo sau là cha của phần tử
    button {
      margin: 10px;
    }
    
    03 (phần tử
    btn.removeEventListener('click', changeBackground);
    
    1)

Chúng tôi mô tả điều này bằng cách nói rằng sự kiện nổi lên từ phần tử trong cùng đã được nhấp vào

Hành vi này có thể hữu ích và cũng có thể gây ra sự cố không mong muốn. Trong các phần tiếp theo, chúng ta sẽ xem vấn đề mà nó gây ra và tìm giải pháp

Trong ví dụ này, trang của chúng tôi chứa một video ban đầu bị ẩn và một nút có nhãn "Hiển thị video". Chúng tôi muốn tương tác sau đây

  • Khi người dùng nhấp vào nút "Hiển thị video", hiển thị hộp chứa video nhưng chưa bắt đầu phát video
  • Khi người dùng nhấp vào video, bắt đầu phát video
  • Khi người dùng nhấp vào bất kỳ đâu trong hộp bên ngoài video, hãy ẩn hộp

HTML trông như thế này

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
0

Nó bao gồm

  • một phần tử
    const btn = document.querySelector('button');
    
    function random(number) {
      return Math.floor(Math.random() * (number+1));
    }
    
    function changeBackground() {
      const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
      document.body.style.backgroundColor = rndCol;
    }
    
    btn.addEventListener('click', changeBackground);
    
    2
  • một phần tử
    button {
      margin: 10px;
    }
    
    03 ban đầu có thuộc tính
    button {
      margin: 10px;
    }
    
    13
  • một phần tử
    const controller = new AbortController();
    
    btn.addEventListener('click', () => {
      const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
      document.body.style.backgroundColor = rndCol;
    }, { signal: controller.signal }); // pass an AbortSignal to this handler
    
    9 được lồng bên trong phần tử
    button {
      margin: 10px;
    }
    
    03

Chúng tôi đang sử dụng CSS để ẩn các phần tử với tập hợp lớp

button {
  margin: 10px;
}
16

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
1

JavaScript trông như thế này

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
2

Điều này thêm ba người nghe sự kiện

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
7

  • một trên
    const btn = document.querySelector('button');
    
    function random(number) {
      return Math.floor(Math.random() * (number+1));
    }
    
    function changeBackground() {
      const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
      document.body.style.backgroundColor = rndCol;
    }
    
    btn.addEventListener('click', changeBackground);
    
    2, hiển thị
    button {
      margin: 10px;
    }
    
    03 có chứa
    const controller = new AbortController();
    
    btn.addEventListener('click', () => {
      const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
      document.body.style.backgroundColor = rndCol;
    }, { signal: controller.signal }); // pass an AbortSignal to this handler
    
    9
  • một trên
    const controller = new AbortController();
    
    btn.addEventListener('click', () => {
      const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
      document.body.style.backgroundColor = rndCol;
    }, { signal: controller.signal }); // pass an AbortSignal to this handler
    
    9, bắt đầu phát video
  • một trên
    button {
      margin: 10px;
    }
    
    03, ẩn video

Hãy xem cách nó hoạt động

Bạn sẽ thấy rằng khi bạn nhấp vào nút, hộp và video chứa trong đó sẽ hiển thị. Nhưng sau đó khi bạn nhấp vào video, video bắt đầu phát nhưng hộp lại bị ẩn

Video nằm trong

button {
  margin: 10px;
}
03 — nó là một phần của nó — vì vậy, việc nhấp vào video sẽ chạy cả trình xử lý sự kiện, gây ra hành vi này

Như chúng ta đã thấy trong phần trước, sự kiện sủi bọt đôi khi có thể tạo ra sự cố, nhưng có một cách để ngăn chặn điều đó. Đối tượng

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.onclick = () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}
6 có sẵn một chức năng có tên là
button {
  margin: 10px;
}
25, khi được gọi bên trong một trình xử lý sự kiện, nó sẽ ngăn không cho sự kiện chuyển sang bất kỳ phần tử nào khác

Chúng tôi có thể khắc phục sự cố hiện tại của mình bằng cách thay đổi JavaScript thành điều này

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
3

Tất cả những gì chúng ta đang làm ở đây là gọi

button {
  margin: 10px;
}
25 trên đối tượng sự kiện trong trình xử lý cho sự kiện
const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
7 của phần tử
const controller = new AbortController();

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}, { signal: controller.signal }); // pass an AbortSignal to this handler
9. Điều này sẽ ngăn sự kiện đó nổi bọt lên hộp. Bây giờ hãy thử nhấp vào nút và sau đó nhấp vào video

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
4

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
1

Một hình thức lan truyền sự kiện thay thế là chụp sự kiện. Điều này giống như bong bóng sự kiện nhưng thứ tự bị đảo ngược. vì vậy, thay vì sự kiện kích hoạt đầu tiên trên phần tử trong cùng được nhắm mục tiêu, sau đó lần lượt kích hoạt các phần tử ít lồng nhau hơn, sự kiện sẽ kích hoạt trước trên phần tử lồng nhau ít nhất, sau đó là các phần tử lồng nhau liên tiếp hơn, cho đến khi đạt được mục tiêu

Chụp sự kiện bị tắt theo mặc định. Để kích hoạt nó, bạn phải vượt qua tùy chọn

button {
  margin: 10px;
}
29 trong
const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
8

Ví dụ này giống như ví dụ chúng ta đã thấy trước đó, ngoại trừ việc chúng ta đã sử dụng tùy chọn

button {
  margin: 10px;
}
29

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
7

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
7

Trong trường hợp này, thứ tự các tin nhắn bị đảo ngược. trình xử lý sự kiện

btn.removeEventListener('click', changeBackground);
1 kích hoạt trước, tiếp theo là trình xử lý sự kiện
button {
  margin: 10px;
}
03, tiếp theo là trình xử lý sự kiện
const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
2

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
8

Tại sao phải bận tâm với cả chụp và sủi bọt? . Khi W3C quyết định cố gắng chuẩn hóa hành vi và đạt được sự đồng thuận, họ đã kết thúc với hệ thống này bao gồm cả hai, đó là điều mà các trình duyệt hiện đại triển khai

Theo mặc định, hầu hết tất cả các trình xử lý sự kiện đều được đăng ký trong giai đoạn bong bóng và điều này thường có ý nghĩa hơn trong hầu hết thời gian

Trong phần trước, chúng ta đã xem xét sự cố do bong bóng sự kiện gây ra và cách khắc phục sự cố đó. Tuy nhiên, bong bóng sự kiện không chỉ gây phiền nhiễu. nó có thể rất hữu ích. Đặc biệt, nó cho phép ủy quyền sự kiện. Trong thực tế này, khi chúng tôi muốn một số mã chạy khi người dùng tương tác với bất kỳ một trong số lượng lớn các phần tử con, chúng tôi đặt trình xử lý sự kiện trên cha mẹ của chúng và có các sự kiện xảy ra trên chúng bong bóng lên cha mẹ của chúng thay vì phải

Hãy quay lại ví dụ đầu tiên của chúng tôi, nơi chúng tôi đặt màu nền của toàn bộ trang khi người dùng nhấp vào nút. Giả sử rằng thay vào đó, trang được chia thành 16 ô và chúng tôi muốn đặt mỗi ô thành một màu ngẫu nhiên khi người dùng nhấp vào ô đó

Đây là HTML

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.addEventListener('click', () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
});
9

Chúng tôi có một ít CSS, để đặt kích thước và vị trí của các ô

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
0

Bây giờ trong JavaScript, chúng tôi có thể thêm trình xử lý sự kiện nhấp chuột cho mọi ô. Nhưng một tùy chọn đơn giản và hiệu quả hơn nhiều là đặt trình xử lý sự kiện nhấp chuột trên cấp độ gốc và dựa vào bong bóng sự kiện để đảm bảo rằng trình xử lý được thực thi khi người dùng nhấp vào ô xếp

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

function changeBackground() {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}

btn.addEventListener('click', changeBackground);
1

Đầu ra như sau (hãy thử nhấp vào nó)

Ghi chú. Trong ví dụ này, chúng tôi đang sử dụng

const btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random() * (number+1));
}

btn.onclick = () => {
  const rndCol = `rgb(${random(255)}, ${random(255)}, ${random(255)})`;
  document.body.style.backgroundColor = rndCol;
}
2 để lấy phần tử là mục tiêu của sự kiện (nghĩa là phần tử trong cùng). Nếu chúng ta muốn truy cập phần tử đã xử lý sự kiện này (trong trường hợp này là vùng chứa), chúng ta có thể sử dụng
button {
  margin: 10px;
}
36

Ghi chú. Xem mục tiêu sự kiện hữu ích. html cho mã nguồn đầy đủ;

Bạn đã đọc đến cuối bài viết này, nhưng liệu bạn có nhớ được thông tin quan trọng nhất không? . Sự kiện

Bây giờ bạn sẽ biết tất cả những gì bạn cần biết về các sự kiện web ở giai đoạn đầu này. Như đã đề cập, các sự kiện không thực sự là một phần của JavaScript cốt lõi — chúng được xác định trong API Web của trình duyệt

Ngoài ra, điều quan trọng là phải hiểu rằng các bối cảnh khác nhau mà JavaScript được sử dụng có các mô hình sự kiện khác nhau — từ API Web đến các lĩnh vực khác như WebExtensions và Node của trình duyệt. js (JavaScript phía máy chủ). Chúng tôi không mong đợi bạn hiểu tất cả các lĩnh vực này ngay bây giờ, nhưng nó chắc chắn sẽ giúp bạn hiểu được những điều cơ bản của các sự kiện khi bạn tiếp tục học phát triển web

Nếu có gì chưa hiểu vui lòng đọc lại bài viết hoặc liên hệ với chúng tôi để được trợ giúp

Tham số e trong JavaScript là gì?

Tham số e mà bạn đang hỏi là một đối tượng Sự kiện và nó đại diện cho sự kiện được kích hoạt khiến chức năng của bạn bị thực thi . Nó không thực sự phải là e , bạn có thể đặt tên cho nó bất cứ thứ gì bạn muốn giống như tất cả các tham số chức năng khác.

Sự kiện e là gì?

Sự kiện E được định nghĩa là ' nhận được một số là bội số của ' 1 ' khi tung xúc xắc một lần . Xác suất của sự kiện bổ sung của E là. JEE Main 2022 Câu hỏi thảo luận trực tiếp.

e có nghĩa là gì trong phản ứng JS?

Ở đây, e là một sự kiện tổng hợp . React xác định các sự kiện tổng hợp này theo thông số kỹ thuật của W3C, vì vậy bạn không cần phải lo lắng về khả năng tương thích giữa các trình duyệt. Các sự kiện phản ứng không hoạt động giống như các sự kiện gốc.

Sự khác biệt giữa hàm () và hàm e là gì?

Không có sự khác biệt về mặt kỹ thuật trong 2 biểu thức . 'e' đề cập đến biến sự kiện là tùy chọn và hoạt động giống biểu thức này hơn trong jquery. bạn có thể sử dụng biến e đó để tìm ra một số thông tin nhất định như mục tiêu đã gọi sự kiện hoặc bất kỳ thuộc tính nào khác. jQuery(tài liệu).