การทำงานร่วมกันด้วย JavaScript
| English | ไทย |
|---|---|
| DOM/dɒm/ | DOM |
| event/ɪˈvent/ | เหตุการณ์ |
| function/ˈfʌŋkʃn/ | function |
เมนูเปิด แต่ปุ่มยังบอกว่าเป็นปิด
- แผงที่มองเห็นได้และสถานะ accessibility อาจไม่ตรงกัน การโต้ตอบที่เชื่อถือได้ควรอัปเดตทั้งเนื้อหาและควบคุมที่อธิบายมัน
- JavaScript ในเบราว์เซอร์ตอบสนองต่อการใช้งานของผู้ใช้ ห้ามใส่ข้อมูลลับเช่นรหัสผ่านในโค้ดฝั่ง client เพราะผู้เยี่ยมชมสามารถตรวจสอบและแก้ไขสิ่งที่กำลังทำงานบนเครื่องของตนเองได้
หาองค์ประกอบที่ parses แล้ว
- DOM แทนเอกสารโดยแบ่งเป็นโหนดเมื่อ HTML ถูก parse โค้ดสามารถค้นหาโหนดที่มีอยู่และเปลี่ยนแปลงคุณสมบัติของโหนดนั้นได้
- สคริปต์ที่ทำงานก่อนเป้าหมายถูก parse อาจได้รับ
nullสคริปต์ภายนอกแบบ deferred จะทำงานหลังการ parse; ส่วนสคริปต์ที่อยู่ท้าย body ก็ทำงานได้ดีสำหรับองค์ประกอบที่อยู่เหนือมันอยู่แล้ว
DOM แทนอะไร?
โหนดจะพร้อมใช้งานเมื่อเอกสารถูก parse; การ query จะไม่พบเป้าหมายที่ยังไม่ได้ถูก parse
ลงทะเบียนการตอบสนองเพียงครั้งเดียว
- Event บันทึกการกระทำเช่นการคลิกหรือส่งฟอร์ม
addEventListenerทำการลงทะเบียน function เพื่อทำงานเมื่อ event นั้นถูกส่งออกมา - หาปุ่มและแผง (panel) ลงทะเบียน listener แล้วอัปเดต state ทุกครั้งที่คลิก อย่าเรียก function ขณะลงทะเบียนมันหากคุณต้องการส่งมันไปเป็น handler
วิธีใดที่ลงทะเบียน event handler กับองค์ประกอบ?
addEventListener ลงทะเบียน callback สำหรับเหตุการณ์เช่น click
เรียงลำดับขั้นตอนสำหรับการตั้งค่าการโต้ตอบนี้
การลงทะเบียนprecedes การตอบสนองต่อเหตุการณ์; handler จะทำงานเมื่อมีการส่งเหตุการณ์
รักษาค่าสำรองให้ใช้งานได้
- บันทึกเป็นไฟล์ HTML ลิงก์จะปรากฏให้เห็นตั้งแต่ต้น; ปุ่มสลับจะแสดงก็ต่อเมื่อ handler ของมันพร้อมใช้งานแล้วเท่านั้น
- คลิกปุ่มสองครั้ง ตรวจสอบว่าแผงและ
aria-expandedเปลี่ยนแปลงไปด้วยกัน ปุ่ม native ยังตอบสนองต่อการกดจากคีย์บอร์ดด้วย
<!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>
เริ่มต้น: ลิงก์ปรากฏ, expanded เป็น true คลิกครั้งแรก: ลิงก์ซ่อน, expanded เป็น false คลิกครั้งที่สอง: ลิงก์ปรากฏ, expanded เป็น true เมื่อปิด JavaScript แล้ว ลิงก์เดิมจะยังคงปรากฏให้เห็น
ในตัวอย่างที่มีคำตอบ JavaScript ถูกปิดใช้งาน สิ่งที่จะเกิดขึ้นกับลิงก์นำทางเดิม?
ลิงก์เริ่มมองเห็นได้ ปุ่มเริ่มซ่อนอยู่ ดังนั้นการเพิ่มประสิทธิภาพที่ไม่สำเร็จจึงไม่ลบลบการนำทางที่สำคัญออก
จับคู่สถานะพาเนลแต่ละตัวกับสถานะปุ่มที่ถูกต้อง
aria-expanded อธิบายว่าพื้นที่ควบคุมกำลังขยายอยู่หรือไม่
แยกการตรวจสอบที่ช่วยได้จากการตรวจสอบที่เชื่อถือได้
- การตรวจสอบจากเบราว์เซอร์สามารถให้ผลตอบรับได้รวดเร็ว แต่เซิร์ฟเวอร์ต้องตรวจสอบค่าและสิทธิ์ที่ส่งมาอย่างอิสระ ผู้เรียกอาจข้ามหรือแก้ไขโค้ดในเบราว์เซอร์ได้
- ใช้
textContentเพื่อแทรกข้อความธรรมดาแทนการตีความว่าเป็น HTML ตรวจสอบองค์ประกอบที่ขาดหายและความผิดพลาดก่อนเพิ่มฟีเจอร์อื่นๆ
handler การคลิกเพียงอย่างเดียวไม่ทำให้องค์ประกอบที่กำหนดเองเข้าถึงได้ด้วยคีย์บอร์ด ให้ใช้ควบคุม native ที่เหมาะสมและตรวจสอบ focus และการกระตุ้น นอกจากนี้ตรวจสอบว่า CSS ของคุณไม่ได้ Overrides สถานะซ่อนของแผง
เซิร์ฟเวอร์เชื่อถือทุกค่าที่ถูกส่งมาเพราะเบราว์เซอร์ตรวจสอบแล้ว
ผู้เรียกสามารถข้ามหรือแก้ไขโค้ดเบราว์เซอร์ได้ ตรวจสอบค่าและสิทธิ์อย่างอิสระบนเซิร์ฟเวอร์
ติดตามการกระทำสองครั้งและความล้มเหลว
- บันทึกสถานะเริ่มต้นและสถานะหลังการกระตุ้นสองครั้ง ทดสอบอีกครั้งโดยใช้คีย์บอร์ด แล้วตรวจสอบว่าการนำทางที่สำคัญยังคงมีอยู่โดยไม่ต้องใช้สคริปต์
- อธิบายว่าอะไรทำงานในเบราว์เซอร์และอะไรยังต้องการการตรวจสอบจากเซิร์ฟเวอร์ ทดลองตัวอย่างนี้ในเครื่องโดยไม่ส่งข้อมูลฟอร์มจริง
องค์ประกอบที่ถูก parse → ลงทะเบียน event handler → อัปเดต state อย่างสม่ำเสมอ รักษาเนื้อหาสำรองที่มีประโยชน์ไว้ และเก็บการตรวจสอบที่เชื่อถือได้ไว้ที่เซิร์ฟเวอร์
แผงควบคุมเริ่มแสดงอยู่ การสลับสถานะทำงานสองครั้ง สถานะสุดท้ายคืออะไร?
การคลิกครั้งแรกซ่อนมัน; การคลิกครั้งที่สองคืนค่ามันมา ทั้งสองสถานะต้องมีความสอดคล้องกัน
ข้อใดบ้างที่ควรอยู่ในการทบทวนปฏิสัมพันธ์เฉพาะนี้? เลือกทุกข้อที่ใช้ได้
ทดสอบการทำงาน สถานะ และทางเลือกสำรอง โค้ดเบราว์เซอร์ไม่ใช่สถานที่ปลอดภัยสำหรับข้อมูลรับรองความลับ