Tương tác bằng JavaScript
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| DOM/dɒm/ | mô hình đối tượng tài liệu |
| event/ɪˈvent/ | sự kiện |
| function/ˈfʌŋkʃn/ | hàm |
Một menu được mở, nhưng nút của nó vẫn hiển thị trạng thái đóng
- Một bảng điều khiển có thể thấy và trạng thái khả năng truy cập của nó có thể không khớp nhau. Một tương tác đáng tin cậy sẽ cập nhật cả nội dung và điều khiển mô tả nó.
- JavaScript trình duyệt phản hồi với hành động của người dùng. Đừng đưa thông tin xác thực riêng tư vào mã máy khách; khách truy cập có thể xem xét và thay đổi những gì đang chạy trên máy của họ.
Tìm các phần tử đã được phân tích
- DOM biểu diễn tài liệu dưới dạng các node khi HTML được phân tích. Mã có thể truy vấn một node hiện có và thay đổi các thuộc tính của nó.
- Một script chạy trước khi mục tiêu của nó được phân tích có thể nhận được
null. Một script bên ngoài được trì hoãn sẽ chạy sau khi phân tích; một script ở cuối body cũng có thể hoạt động cho các phần tử nằm phía trên nó.
DOM đại diện cho điều gì?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Các nút chỉ trở nên khả dụng khi tài liệu đang được phân tích; một truy vấn không thể tìm thấy mục tiêu chưa được phân tích.
Đăng ký phản hồi chỉ một lần
- Một sự kiện ghi lại một hành động như nhấp chuột hoặc gửi biểu mẫu.
addEventListenerđăng ký một hàm để chạy khi sự kiện đó được phát ra. - Tìm nút và bảng điều khiển, đăng ký người nghe, sau đó cập nhật trạng thái trong mỗi lần nhấp. Đừng gọi hàm khi đang đăng ký nó nếu bạn muốn truyền nó như một trình xử lý.
Phương thức nào đăng ký một xử lý sự kiện trên một phần tử?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
addEventListener đăng ký một hàm callback cho một sự kiện như click.
Sắp xếp các bước để thiết lập tương tác này theo đúng thứ tự.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Đăng ký diễn ra trước phản hồi sự kiện; trình xử lý chạy khi sự kiện được phân phối.
Giữ một fallback có thể sử dụng
- Lưu đây dưới dạng tệp HTML. Các liên kết ban đầu có thể thấy được; nút chuyển đổi chỉ xuất hiện sau khi trình xử lý của nó sẵn sàng.
- Nhấp nút hai lần. Kiểm tra xem bảng điều khiển và
aria-expandedcó thay đổi cùng nhau hay không. Nút bản địa cũng phản hồi với kích hoạt bằng bàn phím.
<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><title>Club menu</title></head>
<body>
<button id="menu-button" type="button" hidden
aria-controls="menu-panel" aria-expanded="true">Menu</button>
<nav id="menu-panel" aria-label="Club">
<a href="#meeting">Meeting details</a>
</nav>
<main id="meeting"><h1>Meet Thursday in room 12</h1></main>
<script>
const button = document.querySelector('#menu-button');
const panel = document.querySelector('#menu-panel');
button.addEventListener('click', () => {
panel.hidden = !panel.hidden;
button.setAttribute('aria-expanded', String(!panel.hidden));
});
button.hidden = false;
</script>
</body>
</html>
Ban đầu: các liên kết có thể thấy, expanded true. Nhấp lần đầu: các liên kết ẩn, expanded false. Nhấp lần thứ hai: các liên kết có thể thấy, expanded true. Khi tắt JavaScript, các liên kết gốc vẫn có thể thấy được.
Trong ví dụ đã giải, JavaScript bị tắt. Các liên kết điều hướng ban đầu sẽ xảy ra điều gì?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Các liên kết bắt đầu hiển thị. Nút bắt đầu ẩn, vì vậy việc nâng cấp thất bại không loại bỏ điều hướng quan trọng.
Gắn mỗi trạng thái bảng điều khiển với trạng thái nút tương ứng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
aria-expanded mô tả xem vùng điều khiển hiện tại có đang mở rộng hay không.
Tách các kiểm tra hữu ích khỏi các kiểm tra đáng tin cậy
- Xác minh trình duyệt có thể cung cấp phản hồi nhanh, nhưng máy chủ phải xác minh các giá trị và quyền hạn được gửi đi độc lập. Người gọi có thể bỏ qua hoặc thay đổi mã trình duyệt.
- Sử dụng
textContentđể chèn văn bản thuần thay vì giải thích nó như HTML. Kiểm tra các phần tử thiếu và lỗi trước khi thêm các tính năng khác.
Một trình xử lý click đơn lẻ không làm cho một phần tử tùy chỉnh khả năng truy cập bằng bàn phím. Hãy sử dụng điều khiển bản địa phù hợp và xác minh focus và kích hoạt. Ngoài ra, hãy kiểm tra xem CSS của bạn có ghi đè trạng thái ẩn của bảng điều khiển hay không.
Máy chủ có thể tin tưởng mọi giá trị được gửi vào vì trình duyệt đã xác thực nó.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Người gọi có thể vượt qua hoặc thay đổi mã trình duyệt. Xác thực giá trị và quyền hạn độc lập trên máy chủ.
Theo dõi hai thao tác và một lỗi
- Ghi lại trạng thái ban đầu và trạng thái sau hai lần kích hoạt. Lặp lại bằng bàn phím, sau đó kiểm tra xem điều hướng thiết yếu vẫn khả dụng mà không cần script.
- Giải thích những gì chạy trên trình duyệt và những gì vẫn cần kiểm tra máy chủ. Thử nghiệm ví dụ cục bộ này mà không gửi dữ liệu biểu mẫu thực tế nào.
Phần tử được phân tích → đăng ký sự kiện xử lý → cập nhật trạng thái nhất quán. Giữ lại nội dung dự phòng hữu ích và duy trì xác minh tin cậy ở phía máy chủ.
Bảng điều khiển bắt đầu ở trạng thái khả hiển. Nút chuyển đổi hoạt động hai lần. Trạng thái cuối cùng là gì?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Lần nhấp đầu tiên ẩn nó; lần thứ hai khôi phục lại. Cả hai trạng thái phải giữ nhất quán.
Kiểm tra nào thuộc về đánh giá tương tác cục bộ này? Chọn tất cả các đáp án phù hợp.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Kiểm tra thao tác, trạng thái và phương án dự phòng. Mã trình duyệt không phải là nơi an toàn để lưu thông tin xác thực riêng tư.