Giới thiệu
Events là các hành động diễn ra trong trình duyệt có thể được khởi tạo bởi chính người dùng hoặc chính trình duyệt đó. Dưới đây là một số ví dụ về các sự kiện phổ biến có thể xảy ra trên trang web:
- Trang kết thúc tải
- Người dùng nhấp vào nút
- Người dùng di chuột qua menu thả xuống
- Người dùng gửi biểu mẫu
- Người dùng nhấn một phím trên bàn phím của họ
Event Handlers và Event Listeners
- Event handlers nội dòng
- Thuộc tính Event handler
- Event listeners
Chúng tôi sẽ đi qua tất cả ba phương pháp để đảm bảo rằng bạn đã quen thuộc với mỗi cách một sự kiện có thể được kích hoạt, sau đó thảo luận về ưu và nhược điểm của từng phương pháp.
Thuộc tính Event Handler nội tuyến
Để bắt đầu tìm hiểu về các trình xử lý sự kiện, trước tiên chúng ta sẽ xem xét trình event handler trên dòng. Hãy bắt đầu với một ví dụ rất cơ bản bao gồm một phần tử nút và một phần tử p. Chúng tôi muốn người dùng nhấp vào nút để thay đổi nội dung văn bản của p.
Hãy bắt đầu với một trang HTML với một nút trong cơ thể. Chúng tôi sẽ giới thiệu một tệp JavaScript mà chúng tôi sẽ thêm mã vào một chút.
events.html
Events
Click me
Try to change me.
events.html
EventsClick me
Try to change me.
Hãy tạo tệp events.js của chúng ta, mà chúng ta đã đặt trong thư mục js / ở đây. Trong đó, chúng ta sẽ tạo hàm changeText (), nó sẽ sửa đổi textContent của phần tử p.
js/events.js
// Function to modify the text content of the paragraph
const changeText = () => {
const p = document.querySelector('p');
p.textContent = "I changed because of an inline event handler.";
}
Event handlers trên dòng là một cách đơn giản để bắt đầu hiểu các sự kiện, nhưng chúng thường không được sử dụng ngoài mục đích thử nghiệm và giáo dục.
Thuộc tính Event Handler
events.html
...
Click me
I will change.
...
Chức năng của chúng tôi sẽ vẫn tương tự, ngoại trừ bây giờ chúng tôi cần truy cập vào phần tử nút trong JavaScript. Chúng ta chỉ có thể truy cập onclick giống như chúng ta sẽ truy cập style hoặc id hoặc bất kỳ thuộc tính phần tử nào khác, sau đó gán tham chiếu hàm.
js/events.js
// Function to modify the text content of the paragraph
const changeText = () => {
const p = document.querySelector('p');
p.textContent = "I changed because of an event handler property.";
}
// Add event handler as a property of the button element
const button = document.querySelector('button');
button.onclick = changeText;
Lưu ý: Event handlers không tuân theo quy ước camelCase mà hầu hết mã JavaScript
tuân thủ.Lưu ý rằng mã được onclick, không onClick.
Khi bạn tải trang lần đầu tiên, trình duyệt sẽ hiển thị như sau:
js/events.js
const p = document.querySelector('p');
const button = document.querySelector('button');
const changeText = () => {
p.textContent = "Will I change?";
}
const alertText = () => {
alert('Will I alert?');
}
// Events can be overwritten
button.onclick = changeText;
button.onclick = alertText;
Event Listeners
Bổ sung mới nhất cho event handlers JavaScript là event listeners.1 event listeners cho một sự kiện trên một phần tử. Thay vì gán trực tiếp sự kiện cho một thuộc tính trên phần tử, chúng ta sẽ sử dụng phương thức addEventListener () để lắng nghe sự kiện.
addEventListener () nhận hai tham số bắt buộc - sự kiện nó được lắng nghe, và hàm gọi lại của người nghe.
HTML cho trình xử lý sự kiện của chúng tôi sẽ giống như ví dụ trước.
events.html
...Click me
I will change.
...
Chúng ta sẽ vẫn sử dụng hàm changeText () giống như trước đây. Chúng ta sẽ gắn phương thức addEventListener () vào button.
js/events.js
// Function to modify the text content of the paragraph
const changeText = () => {
const p = document.querySelector('p');
p.textContent = "I changed because of an event listener.";
}
// Listen for click event
const button = document.querySelector('button');
button.addEventListener('click', changeText);
js/events.js
const p = document.querySelector('p');
const button = document.querySelector('button');
const changeText = () => {
p.textContent = "Will I change?";
}
const alertText = () => {
alert('Will I alert?');
}
// Multiple listeners can be added to the same event and element
button.addEventListener('click', changeText);
button.addEventListener('click', alertText);
// An anonymous function on an event listener
button.addEventListener('click', () => {
p.textContent = "Will I change?";
});
// Remove alert function from button element
button.removeEventListener('click', alertText);
Events chung
Mouse Events
Form Events
Keyboard Events
Mặc dù chúng trông giống nhau, các sự kiện nhấn phím và bấm phím không truy cập tất cả các khóa giống nhau. Trong khi phím tắt sẽ xác nhận mọi phím được nhấn, nhấn phím sẽ bỏ qua các phím không tạo ra ký tự, chẳng hạn như SHIFT, ALT hoặc DELETE.
Keyboard events có các thuộc tính cụ thể để truy cập các khóa riêng lẻ.
Nếu một tham số, được gọi là một event object, được chuyển qua cho event listener, chúng ta có thể truy cập thêm thông tin về hành động diễn ra. Ba thuộc tính liên quan đến các đối tượng bàn phím bao gồm keyCode
, key
, và code
..
Ví dụ: nếu người dùng nhấn chữ cái trên bàn phím của họ, các thuộc tính sau liên quan đến khóa đó sẽ hiển thị:
// Test the keyCode, key, and code properties
document.addEventListener('keydown', event => {
console.log('key: ' + event.keyCode);
console.log('key: ' + event.key);
console.log('code: ' + event.code);
});
Output
keyCode: 65
key: a
code: KeyA
Lưu ý rằng keyCode đang trong quá trình không được chấp nhận và nên sử dụng mã trong các project new.
Event Objects
Event
object bao gồm các thuộc tính và phương thức mà tất cả các sự kiện có thể truy cập. NgoàiEvent
object chung, mỗi loại sự kiện có các phần mở rộng riêng của nó, chẳng hạn như KeyboardEvent và MouseEvent.
Event
object được truyền qua một hàm listener như một tham số. Nó thường được viết dưới dạng event hoặc e. Chúng ta có thể truy cập thuộc tính mã của sự kiện keydown để tái tạo các điều khiển bàn phím của một game PC. Để dùng thử, hãy tạo một tệp HTML cơ bản với các thẻ
và tải nó vào trình duyệt.
event-test-p.html
Events
// Pass an event through to a listener
document.addEventListener('keydown', event => {
var element = document.querySelector('p');
// Set variables for keydown codes
var a = 'KeyA';
var s = 'KeyS';
var d = 'KeyD';
var w = 'KeyW';
// Set a direction for each code
switch (event.code) {
case a:
element.textContent = 'Left';
break;
case s:
element.textContent = 'Down';
break;
case d:
element.textContent = 'Right';
break;
case w:
element.textContent = 'Up';
break;
}
});
Khi bạn nhấn một trong các phím - a, s, d hoặc w - bạn sẽ thấy kết quả tương tự như sau:
Từ đây, bạn có thể tiếp tục phát triển cách trình duyệt sẽ phản hồi và cho người dùng nhấn các phím đó và có thể tạo một trang web động hơn.
Tiếp theo, chúng ta sẽ đi qua một trong những thuộc tính sự kiện thường được sử dụng nhất: thuộc tính target. Trong ví dụ sau, chúng tôi có ba phần tử div bên trong một section.
event-test-div.html
Events
One
Two
Three
Sử dụng event.target với JavaScript trong Developer Console của trình duyệt, chúng tôi có thể đặt một event listener trên phần tử phần bên ngoài section và nhận phần tử lồng nhau sâu sắc nhất.
const section = document.querySelector('section');
// Print the selected target
section.addEventListener('click', event => {
console.log(event.target);
});
Nhấp vào bất kỳ một trong những yếu tố đó sẽ trả về kết quả của phần tử cụ thể có liên quan đến Bảng điều khiển bằng event.target. Điều này cực kỳ hữu ích, vì nó cho phép bạn chỉ đặt một event listener có thể được sử dụng để truy cập vào nhiều phần tử lồng nhau.
Event
object, chúng tôi có thể thiết lập các câu trả lời liên quan đến tất cả các sự kiện, bao gồm các sự kiện chung và các tiện ích mở rộng cụ thể hơn.Phần kết luận
Event
object. Sử dụng kiến thức này, bạn sẽ có thể bắt đầu tạo trang web và ứng dụng động.Bài dịch từ nguồn https://www.digitalocean.com/community/tutorials/understanding-events-in-javascript
Xin cảm ơn các bạn đã theo dõi bài viết của Nguyên Vũ.
Bình luận