JavaScript

JavaScript memainkan peran utama dalam hampir semua hal yang kita buat—mulai dari komponen dinamis yang lebih kecil hingga produk lengkap yang berjalan di framework JavaScript, seperti React atau Angular.

Penggunaan (atau penggunaan berlebihan) JavaScript ini telah menimbulkan banyak tren yang mengkhawatirkan, seperti waktu pemuatan yang lama karena banyaknya kode, penggunaan elemen HTML non-semantik, dan injeksi HTML dan CSS melalui JavaScript. Selain itu, Anda mungkin tidak yakin bagaimana aksesibilitas sesuai dengan setiap bagian ini.

JavaScript dapat berdampak besar pada aksesibilitas situs Anda. Dalam modul ini, kita akan membagikan beberapa pola umum untuk aksesibilitas yang ditingkatkan oleh JavaScript, serta solusi untuk masalah aksesibilitas yang muncul dari penggunaan framework JavaScript.

Peristiwa pemicu

Peristiwa JavaScript memungkinkan pengguna berinteraksi dengan konten web dan melakukan tindakan tertentu. Banyak orang, seperti pengguna pembaca layar, orang dengan disabilitas keterampilan motorik halus, orang tanpa mouse atau trackpad, dan lainnya, mengandalkan dukungan keyboard untuk berinteraksi dengan web. Anda harus menambahkan dukungan keyboard ke tindakan JavaScript, karena memengaruhi semua pengguna ini.

Mari kita lihat peristiwa klik. Jika peristiwa onClick() digunakan pada elemen HTML semantik seperti <button> atau <a>, peristiwa tersebut secara alami menyertakan fungsi mouse dan keyboard. Namun, fungsi keyboard tidak diterapkan secara otomatis saat peristiwa onClick() ditambahkan ke elemen non-semantik, seperti <div> generik.

Larangan
<div role="button" tabindex="0" onclick="doAction()">Click me!</div>
Anjuran
<button onclick="doAction()">Click me!</button>

Lihat pratinjau perbandingan ini di CodePen.

Jika elemen non-semantik digunakan untuk peristiwa pemicu, peristiwa keydown/keyup harus ditambahkan untuk mendeteksi penekanan tombol enter atau spasi. Menambahkan peristiwa pemicu ke elemen non-semantik sering kali terlupakan. Sayangnya, jika dilupakan, hasilnya adalah komponen yang hanya dapat diakses dengan mouse. Pengguna khusus keyboard tidak memiliki akses ke tindakan terkait.

Judul halaman

Seperti yang telah kita pelajari di Modul dokumen, judul halaman sangat penting bagi pengguna pembaca layar. Ini memberi tahu pengguna halaman yang sedang dibuka dan apakah mereka telah membuka halaman baru.

Jika menggunakan framework JavaScript, Anda perlu mempertimbangkan cara menangani judul halaman. Hal ini sangat penting untuk aplikasi web satu halaman (SPA) yang dimuat dari satu file index.html, karena transisi atau rute (perubahan halaman) tidak melibatkan pemuatan ulang halaman. Setiap kali pengguna memuat halaman baru di SPA, judul tidak akan berubah secara default.

Untuk SPA, nilai document.title dapat ditambahkan secara manual atau dengan paket helper (bergantung pada framework JavaScript). Mengumumkan judul halaman yang diperbarui kepada pengguna pembaca layar mungkin memerlukan beberapa pekerjaan tambahan, tetapi kabar baiknya adalah Anda memiliki opsi, seperti konten dinamis.

Konten dinamis

Salah satu fungsi JavaScript yang paling canggih adalah kemampuan untuk menambahkan HTML dan CSS ke elemen apa pun di halaman. Developer dapat membuat aplikasi dinamis berdasarkan tindakan atau perilaku pengguna.

Misalnya, Anda perlu mengirim pesan kepada pengguna saat mereka login ke situs atau aplikasi Anda. Anda ingin pesan tersebut terlihat berbeda dari latar belakang putih dan menyampaikan pesan: "Anda sekarang login".

Anda dapat menggunakan elemen innerHTML untuk menetapkan konten:

document.querySelector("#banner").innerHTML = '<p>You are now signed in</p>';

Anda dapat menerapkan CSS dengan cara yang serupa, dengan setAttribute:

document.querySelector("#banner").setAttribute("style", "border-color:#0000ff;");

Kekuatan besar memiliki tanggung jawab besar. Sayangnya, injeksi JavaScript HTML dan CSS secara historis telah disalahgunakan untuk membuat konten yang tidak dapat diakses. Beberapa penyalahgunaan umum tercantum di sini:

Kemungkinan penyalahgunaan Penggunaan yang benar
Merender sebagian besar HTML non-semantik Merender bagian HTML semantik yang lebih kecil
Tidak memberikan waktu bagi konten dinamis untuk dikenali oleh teknologi pendukung Menggunakan penundaan waktu setTimeout() untuk memungkinkan pengguna mendengar pesan lengkap
Menerapkan atribut gaya untuk onFocus() secara dinamis Menggunakan :focus untuk elemen terkait dalam stylesheet CSS
Menerapkan gaya inline dapat menyebabkan stylesheet pengguna tidak dibaca dengan benar Simpan gaya Anda dalam file CSS untuk mempertahankan konsistensi tema
Membuat file JavaScript yang sangat besar yang memperlambat performa situs secara keseluruhan Gunakan lebih sedikit JavaScript. Anda mungkin dapat menjalankan fungsi serupa di CSS (seperti animasi atau navigasi melekat), yang mengurai lebih cepat dan memiliki performa lebih baik

Untuk CSS, alihkan class CSS, bukan menambahkan gaya inline, karena hal ini memungkinkan penggunaan kembali dan kesederhanaan. Gunakan konten tersembunyi di halaman dan ganti class untuk menyembunyikan dan menampilkan konten untuk HTML dinamis. Jika Anda perlu menggunakan JavaScript untuk menambahkan konten secara dinamis ke halaman, pastikan JavaScript tersebut sederhana dan ringkas, serta tentu saja dapat diakses.

Pengelolaan fokus

Dalam Modul fokus keyboard, kita telah membahas urutan fokus dan gaya indikator. Pengelolaan fokus adalah mengetahui kapan dan di mana harus menjebak fokus dan kapan fokus tidak boleh terjebak.

Pengelolaan fokus sangat penting bagi pengguna yang hanya menggunakan keyboard.

Tingkat komponen

Anda dapat membuat perangkap keyboard saat fokus komponen tidak dikelola dengan benar. Jebakan keyboard terjadi saat pengguna khusus keyboard terjebak dalam komponen, atau fokus tidak dipertahankan saat seharusnya.

Salah satu pola paling umum yang menyebabkan pengguna mengalami masalah pengelolaan fokus adalah dalam komponen modal. Saat pengguna khusus keyboard menemukan modal, pengguna harus dapat menggunakan tombol tab di antara elemen modal yang dapat ditindaklanjuti, tetapi mereka tidak boleh diizinkan berada di luar modal tanpa menutupnya secara eksplisit. JavaScript sangat penting untuk menangkap fokus ini dengan benar.

Larangan
Anjuran

Tingkat halaman

Fokus juga harus dipertahankan saat pengguna membuka halaman dari satu halaman ke halaman lainnya. Hal ini terutama berlaku di SPA, tempat tidak ada pemuatan ulang browser, dan semua konten berubah secara dinamis. Setiap kali pengguna mengklik link untuk membuka halaman lain dalam aplikasi Anda, fokus akan tetap berada di tempat yang sama atau berpotensi ditempatkan di tempat lain sepenuhnya.

Saat melakukan transisi antar-halaman (atau pemilihan rute), tim pengembangan harus memutuskan tujuan fokus saat halaman dimuat.

Ada beberapa teknik untuk melakukannya:

  • Tempatkan fokus pada penampung utama dengan pengumuman aria-live.
  • Letakkan fokus kembali ke link untuk melewati konten utama.
  • Pindahkan fokus ke judul tingkat teratas halaman baru.

Tempat Anda memutuskan untuk menempatkan fokus akan bergantung pada framework yang Anda gunakan dan konten yang ingin Anda tayangkan kepada pengguna. Hal ini mungkin bergantung pada konteks atau tindakan.

Pengelolaan status

Area lain yang memerlukan JavaScript untuk aksesibilitas adalah pengelolaan status, atau saat status visual komponen atau halaman saat ini diteruskan ke pengguna teknologi pendukung bagi pengguna dengan gangguan penglihatan, tunanetra, atau tunarungu.

Sering kali, status komponen atau halaman dikelola melalui atribut ARIA, seperti yang diperkenalkan dalam modul ARIA dan HTML. Mari kita tinjau beberapa jenis atribut ARIA yang paling umum digunakan untuk membantu mengelola status elemen.

Tingkat komponen

Bergantung pada konten halaman dan informasi yang diperlukan pengguna, ada banyak status ARIA yang perlu dipertimbangkan saat menyampaikan informasi tentang komponen kepada pengguna.

Misalnya, Anda dapat menggunakan atribut aria-expanded untuk memberi tahu pengguna apakah menu drop-down atau daftar diluaskan atau ditutup.

Atau, Anda dapat menggunakan aria-pressed untuk menunjukkan bahwa tombol telah ditekan.

Anda harus selektif saat menerapkan atribut ARIA. Pikirkan alur penggunaan untuk memahami informasi penting yang harus disampaikan kepada pengguna.

Tingkat halaman

Developer sering menggunakan area yang tersembunyi secara visual yang disebut area aktif ARIA untuk mengumumkan perubahan di layar dan pesan pemberitahuan kepada pengguna teknologi dukungan (AT). Area ini dapat disambungkan dengan JavaScript untuk memberi tahu pengguna tentang perubahan dinamis pada halaman tanpa mengharuskan seluruh halaman dimuat ulang.

Secara historis, JavaScript kesulitan untuk mengumumkan konten di aria-live dan region pemberitahuan karena sifatnya yang dinamis. Menambahkan konten secara asinkron ke DOM akan mempersulit AT mengambil region dan mengumumkannya. Agar konten dapat dibaca dengan benar, area live atau pemberitahuan harus berada di DOM saat dimuat, lalu teks dapat diganti secara dinamis.

Jika Anda menggunakan framework JavaScript, kabar baiknya adalah hampir semuanya memiliki paket "live announcer" yang melakukan semua pekerjaan untuk Anda dan dapat sepenuhnya diakses. Anda tidak perlu khawatir tentang membuat region aktif dan menangani masalah yang dijelaskan di bagian sebelumnya.

Berikut adalah beberapa paket live untuk framework JavaScript umum:

JavaScript modern adalah bahasa yang canggih yang memungkinkan developer web membuat aplikasi web yang andal. Hal ini terkadang menyebabkan over-engineering dan, sebagai akibatnya, pola yang tidak dapat diakses. Dengan mengikuti pola dan tips JavaScript dalam modul ini, Anda dapat membuat aplikasi lebih mudah diakses oleh semua pengguna.

Memeriksa pemahaman Anda

Uji pengetahuan Anda tentang JavaScript

Manakah cara terbaik untuk mengubah gaya elemen dengan JavaScript?

Gunakan JavaScript untuk menerapkan gaya dinamis langsung dalam elemen HTML.
Hal ini menyebabkan file JavaScript yang membengkak dan tidak efisien.
Gunakan JavaScript untuk mengalihkan class elemen, dan tambahkan gaya ke sheet gaya CSS Anda.
Simpan gaya Anda di style sheet CSS dan gunakan JavaScript ringan untuk mengubah nama class.

Dapatkah semua tindakan JavaScript mendukung pengguna keyboard?

Ya, tetapi Anda mungkin harus melakukan beberapa pekerjaan tambahan.
HTML semantik mendukung pengguna keyboard secara default, tetapi elemen non-semantik dengan tindakan memerlukan JavaScript tambahan.
Ya, semua tindakan secara otomatis mendukung pengguna keyboard.
Hanya HTML semantik yang otomatis mendukung fokus keyboard.
Tidak, Anda hanya dapat mendukung pengguna keyboard dengan HTML semantik.
Semua elemen HTML dapat mendukung pengguna keyboard.