Interaktivitas dengan JavaScript
Diperkenalkan| English | Makna |
|---|---|
| DOM/dɒm/ | DOM |
| event/ɪˈvent/ | peristiwa |
| function/ˈfʌŋkʃn/ | fungsi |
Menu terbuka, tetapi tombolnya masih menunjukkan status tertutup
- Panel yang terlihat dan status aksesibilitasnya bisa berbeda. Interaksi yang andal memperbarui baik konten maupun kontrol yang mendeskripsikannya.
- JavaScript browser merespons tindakan pengguna. Jangan masukkan kredensial pribadi dalam kode klien; pengunjung dapat memeriksa dan mengubah apa yang berjalan di mesin mereka.
Temukan elemen yang telah diparsing
- DOM merepresentasikan dokumen sebagai node saat HTML diparsir. Kode dapat querying node yang sudah ada dan mengubah propertinya.
- Skrip yang berjalan sebelum targetnya diparsir mungkin mendapatkan
null. Skrip eksternal tertunda akan berjalan setelah parsing selesai; skrip di akhir body juga dapat berfungsi untuk elemen yang sudah berada di atasnya.
Apa yang diwakili oleh DOM?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Node tersedia saat dokumen diparsing; query tidak dapat menemukan target yang belum terproses.
Daftarkan respons sekali saja
- Event mencatat suatu tindakan seperti klik atau pengiriman formulir.
addEventListenermendaftarkan fungsi untuk dijalankan ketika event tersebut dikirimkan. - Temukan tombol dan panel, daftarkan pendengar (listener), lalu perbarui state pada setiap klik. Jangan panggil fungsi saat mendaftarkannya jika Anda bermaksud melewatkan fungsi tersebut sebagai handler.
Metode mana yang mendaftarkan handler acara pada elemen?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
addEventListener mendaftarkan callback untuk acara seperti klik.
Urutkan langkah-langkah untuk mengatur interaksi ini.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Pendaftaran mendahului respons acara; handler berjalan ketika acara dikirimkan.
Pertahankan fallback yang dapat digunakan
- Simpan ini sebagai file HTML. Tautan terlihat secara awal; tombol toggle hanya muncul setelah handler-nya siap.
- Klik tombol dua kali. Pastikan panel dan
aria-expandedberubah bersama-sama. Tombol bawaan juga merespons aktivasi keyboard.
<!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>
Awalnya: tautan terlihat, expanded true. Klik pertama: tautan tersembunyi, expanded false. Klik kedua: tautan terlihat, expanded true. Dengan JavaScript dinonaktifkan, tautan asli tetap terlihat.
Dalam contoh terpecahkan, JavaScript dinonaktifkan. Apa yang terjadi pada tautan navigasi asli?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Tautan mulai terlihat. Tombol mulai tersembunyi, sehingga peningkatan yang gagal tidak menghapus navigasi penting.
Cocokkan setiap status panel dengan status tombol yang sesuai.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
aria-expanded menjelaskan apakah wilayah terkendali saat ini sedang diperluas.
Pisahkan pemeriksaan bantuan dari pemeriksaan terpercaya
- Validasi browser dapat memberikan umpan balik cepat, tetapi server harus memvalidasi nilai yang dikirimkan dan izin secara independen. Pemanggil dapat melewati atau mengubah kode browser.
- Gunakan
textContentuntuk menyisipkan teks biasa alih-alih menafsirkannya sebagai HTML. Periksa elemen yang hilang dan kesalahan sebelum menambahkan fitur lebih lanjut.
Handler klik saja tidak membuat elemen kustom mudah diakses menggunakan keyboard. Gunakan kontrol native yang sesuai dan verifikasi fokus serta aktivasi. Juga pastikan CSS Anda tidak menimpa state tersembunyi panel.
Server dapat mempercayai setiap nilai yang dikirimkan karena browser telah memvalidasinya.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Pengirim dapat melewati atau mengubah kode browser. Validasi nilai dan izin secara independen di sisi server.
Jejakkan dua aksi dan kegagalan
- Catat state awal dan state setelah dua kali aktivasi. Ulangi menggunakan keyboard, lalu pastikan navigasi esensial tetap tersedia tanpa skrip.
- Jelaskan apa yang berjalan di browser dan apa yang masih memerlukan pemeriksaan server. Uji contoh lokal ini tanpa mengirim data formulir sungguhan.
Elemen terparse → handler acara terdaftar → pembaruan state konsisten. Pertahankan konten fallback yang berguna dan simpan validasi terpercaya di sisi server.
Panel dimulai dalam keadaan terlihat. Tombol toggle dijalankan dua kali. Apa status akhirnya?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Klik pertama menyembunyikannya; klik kedua mengembalikannya. Kedua status harus tetap konsisten.
Pemeriksaan mana yang termasuk dalam tinjauan interaksi lokal ini? Pilih semua yang berlaku.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Uji operasi, status, dan fallback. Kode browser bukan tempat yang aman untuk kredensial pribadi.