อ่าน 7 นาที
เหตุการณ์ DOM
เหตุการณ์ DOM (Document Object Model) เป็นสัญญาณว่ามีบางสิ่งเกิดขึ้นหรือกำลังเกิดขึ้น และสามารถถูกกระตุ้นโดยการโต้ตอบของผู้ใช้หรือโดยเบราว์เซอร์ [ 1 ] ภาษาสคริปต์ ฝั่ง ไคลเอ็นต์...
เหตุการณ์ DOM
เหตุการณ์ DOM (Document Object Model)เป็นสัญญาณว่ามีบางสิ่งเกิดขึ้นหรือกำลังเกิดขึ้น และสามารถถูกกระตุ้นโดยการโต้ตอบของผู้ใช้หรือโดยเบราว์เซอร์[ 1 ] ภาษาสคริปต์ฝั่ง ไคลเอ็นต์ เช่น JavaScript , JScript , VBScriptและJava สามารถลงทะเบียน ตัวจัดการเหตุการณ์หรือตัวรับฟังต่างๆบนโหนดองค์ประกอบภายใน โครงสร้าง DOMเช่น ในเอกสาร HTML , XHTML , XULและSVG
ตัวอย่างของ DOM Events:
- เมื่อผู้ใช้คลิกเมาส์
- เมื่อหน้าเว็บโหลดเสร็จแล้ว
- เมื่อโหลดรูปภาพเสร็จแล้ว
- เมื่อเมาส์เลื่อนไปอยู่เหนือองค์ประกอบ
- เมื่อมีการเปลี่ยนแปลงช่องป้อนข้อมูล
- เมื่อมีการส่งแบบฟอร์ม HTML
- เมื่อผู้ใช้กดปุ่ม[ 2 ]
ในอดีต เช่นเดียวกับ DOM โมเดลเหตุการณ์ที่ใช้โดยเว็บเบราว์เซอร์ ต่างๆ มีความแตกต่างกันอย่างมาก ซึ่งก่อให้เกิดปัญหาด้านความเข้ากันได้ เพื่อแก้ไขปัญหานี้ องค์กร World Wide Web Consortium (W3C) จึงได้กำหนดมาตรฐานโมเดลเหตุการณ์ใน DOM ระดับ 2
กิจกรรม
เหตุการณ์ HTML
เหตุการณ์ทั่วไป
มีเหตุการณ์มากมายหลายประเภทที่สามารถสร้างขึ้นได้จากโหนดองค์ประกอบส่วนใหญ่:
- เหตุการณ์เมาส์[ 3 ] [ 4 ]
- เหตุการณ์เกี่ยวกับแป้นพิมพ์
- เหตุการณ์เฟรม/วัตถุ HTML
- เหตุการณ์ของฟอร์ม HTML
- เหตุการณ์ส่วนติดต่อผู้ใช้
- เหตุการณ์การเปลี่ยนแปลง (การแจ้งเตือนเมื่อมีการเปลี่ยนแปลงโครงสร้างของเอกสาร)
- เหตุการณ์ความคืบหน้า[ 5 ] (ใช้โดยXMLHttpRequestและ File API [ 6 ] )
โปรดทราบว่าการจำแนกประเภทเหตุการณ์ข้างต้นไม่ตรงกับการจำแนกประเภทของ W3C อย่างแท้จริง
| หมวดหมู่ | พิมพ์ | คุณลักษณะ | คำอธิบาย | ฟองอากาศ | ยกเลิกได้ |
|---|---|---|---|---|---|
| หนู | คลิก | เมื่อคลิก | เหตุการณ์นี้จะเกิดขึ้นเมื่อ คลิกปุ่ม ของอุปกรณ์ชี้เมาส์เหนือองค์ประกอบใดองค์ประกอบหนึ่ง การคลิกหมายถึงการกดเมาส์ลงและปล่อยเมาส์ออกจากตำแหน่งเดียวกันบนหน้าจอ ลำดับของเหตุการณ์เหล่านี้คือ:
| ใช่ | ใช่ |
| ดับเบิ้ลคลิก | ดับเบิ้ลคลิก | ฟังก์ชันนี้จะทำงานเมื่อคลิกปุ่มเมาส์สองครั้งบนองค์ประกอบใดองค์ประกอบหนึ่ง | ใช่ | ใช่ | |
| เมาส์ดาวน์ | เมื่อเมาส์กดลง | จะทำงานเมื่อกดปุ่มบนอุปกรณ์ชี้เมาส์เหนือองค์ประกอบใดองค์ประกอบหนึ่ง | ใช่ | ใช่ | |
| เมาส์อัพ | เมื่อเมาส์ขึ้น | ฟังก์ชันนี้จะทำงานเมื่อปล่อยปุ่มบนอุปกรณ์ชี้ตำแหน่งเหนือองค์ประกอบใดองค์ประกอบหนึ่ง | ใช่ | ใช่ | |
| เลื่อนเมาส์ไปวางเหนือวัตถุ | เมื่อวางเมาส์เหนือ | จะทำงานเมื่ออุปกรณ์ชี้ตำแหน่งถูกเลื่อนไปที่องค์ประกอบใดองค์ประกอบหนึ่ง | ใช่ | ใช่ | |
| เมาส์โมฟ[ 7 ] | onmousemove | จะทำงานเมื่ออุปกรณ์ชี้เป้าเคลื่อนที่ขณะอยู่เหนือองค์ประกอบใดองค์ประกอบหนึ่ง | ใช่ | ใช่ | |
| เมาส์เอาท์ | ออกจากเมาส์ | จะทำงานเมื่ออุปกรณ์ชี้เป้าเคลื่อนออกห่างจากองค์ประกอบ | ใช่ | ใช่ | |
| ดรากสตาร์ท | ondragstart | ฟังก์ชันนี้จะทำงานเมื่อเริ่มการลากเพื่อลากวัตถุ | ใช่ | ใช่ | |
| ลาก | ออนแดรก | เหตุการณ์นี้จะเกิดขึ้นที่จุดเริ่มต้นของการลาก นั่นคือ องค์ประกอบที่เรียกใช้ฟังก์ชัน dragstart ในระหว่างการดำเนินการลาก | ใช่ | ใช่ | |
| ดราเกนเตอร์ | ออนดราเจนเตอร์ | เหตุการณ์นี้จะเกิดขึ้นเมื่อเมาส์ถูกเลื่อนไปอยู่เหนือองค์ประกอบเป็นครั้งแรกในขณะที่กำลังลากอยู่ | ใช่ | ใช่ | |
| ลากออกจาก | ออนดรากลีฟ | เหตุการณ์นี้จะเกิดขึ้นเมื่อเมาส์ออกจากองค์ประกอบในขณะที่กำลังลากอยู่ | ใช่ | เลขที่ | |
| ลาก | ออนแดรกโอเวอร์ | เหตุการณ์นี้จะเกิดขึ้นเมื่อเลื่อนเมาส์ไปวางเหนือองค์ประกอบขณะที่กำลังลากอยู่ | ใช่ | ใช่ | |
| หยด | ออนดรอป | อีเวนต์การวางจะเกิดขึ้นบนองค์ประกอบที่เกิดการวางเมื่อสิ้นสุดการลาก | ใช่ | ใช่ | |
| ดราเจนด์ | ออนดราเกนด์ | แหล่งที่มาของการลากจะได้รับเหตุการณ์ dragend เมื่อการดำเนินการลากเสร็จสมบูรณ์ ไม่ว่าจะสำเร็จหรือไม่ก็ตาม | ใช่ | เลขที่ | |
| แป้นพิมพ์ | กดปุ่ม | กดปุ่ม | ฟังก์ชันนี้จะทำงานก่อนการกดปุ่ม เมื่อมีการกดปุ่มใดปุ่มหนึ่งบนแป้นพิมพ์ | ใช่ | ใช่ |
| ปุ่มกด | เมื่อกดปุ่ม | ฟังก์ชันนี้จะทำงานหลังจากกดปุ่มใดปุ่มหนึ่งบนแป้นพิมพ์ | ใช่ | ใช่ | |
| คีย์อัพ | ออนคีย์อัพ | จะทำงานเมื่อปล่อยปุ่มใดปุ่มหนึ่งบนแป้นพิมพ์ | ใช่ | ใช่ | |
| เฟรม /ออบเจ็กต์ HTML | โหลด | โหลด | เหตุการณ์นี้จะเกิดขึ้นเมื่อโปรแกรมเว็บเบราว์เซอร์โหลดเนื้อหาทั้งหมดในเอกสารเสร็จสมบูรณ์แล้ว รวมถึงหน้าต่าง เฟรม วัตถุ และรูปภาพ สำหรับองค์ประกอบต่างๆ ฟังก์ชันนี้จะทำงานเมื่อองค์ประกอบเป้าหมายและเนื้อหาทั้งหมดโหลดเสร็จสมบูรณ์แล้ว | เลขที่ | เลขที่ |
| ขนถ่าย | โหลดไม่สำเร็จ | เกิดขึ้นเมื่อเอเจนต์ผู้ใช้ลบเนื้อหาทั้งหมดออกจากหน้าต่างหรือเฟรม สำหรับองค์ประกอบต่างๆ ฟังก์ชันนี้จะทำงานเมื่อองค์ประกอบเป้าหมายหรือเนื้อหาใดๆ ภายในองค์ประกอบนั้นถูกลบออกไป | เลขที่ | เลขที่ | |
| แท้งลูก | ออนบอร์ท | ข้อผิดพลาดนี้เกิดขึ้นเมื่อการโหลดวัตถุ/รูปภาพหยุดชะงักก่อนที่จะโหลดเสร็จสมบูรณ์ | ใช่ | เลขที่ | |
| ข้อผิดพลาด | ข้อผิดพลาด | ข้อผิดพลาดเกิดขึ้นเมื่อไม่สามารถโหลดวัตถุ/รูปภาพ/เฟรมได้อย่างถูกต้อง | ใช่ | เลขที่ | |
| ปรับขนาด | ปรับขนาด | เมื่อมีการปรับขนาดมุมมองเอกสาร ฟังก์ชันนี้จะทำงาน | ใช่ | เลขที่ | |
| ม้วน | เลื่อน | ฟังก์ชันนี้จะทำงานเมื่อมีการเลื่อนองค์ประกอบหรือมุมมองเอกสาร | ไม่ ยกเว้นว่าเหตุการณ์การเลื่อนบนเอกสารจะต้องส่งต่อไปยังหน้าต่าง[ 8 ] | เลขที่ | |
| แบบฟอร์ม HTML | เลือก | onselect | เหตุการณ์นี้จะเกิดขึ้นเมื่อผู้ใช้เลือกข้อความในช่องข้อความรวมถึงช่องป้อนข้อมูลและช่องข้อความ หลายบรรทัด | ใช่ | เลขที่ |
| เปลี่ยน | การเปลี่ยนแปลง | เหตุการณ์นี้จะเกิดขึ้นเมื่อตัวควบคุมสูญเสียโฟกัส ในการป้อนข้อมูล และค่าของตัวควบคุมนั้นได้ถูกแก้ไขไปแล้วหลังจากได้รับโฟกัสกลับคืนมา | ใช่ | เลขที่ | |
| ส่ง | เมื่อส่ง | เมื่อมีการส่งแบบฟอร์ม จะเกิดข้อผิดพลาดขึ้น | ใช่ | ใช่ | |
| รีเซ็ต | รีเซ็ต | เกิดขึ้นเมื่อฟอร์มถูกรีเซ็ต | ใช่ | เลขที่ | |
| จุดสนใจ | โฟกัส | ฟังก์ชันนี้จะทำงานเมื่อองค์ประกอบใดองค์ประกอบหนึ่งได้รับโฟกัส ไม่ว่าจะผ่านทางอุปกรณ์ชี้เมาส์หรือการนำทางด้วยแท็บ | เลขที่ | เลขที่ | |
| เบลอ | ออนเบลอ | เหตุการณ์นี้จะเกิดขึ้นเมื่อองค์ประกอบสูญเสียโฟกัส ไม่ว่าจะผ่านทางอุปกรณ์ชี้เมาส์หรือผ่านการเลื่อนแท็บ | เลขที่ | เลขที่ | |
| ส่วนติดต่อผู้ใช้ | มุ่งเน้น | (ไม่มี) | คล้ายกับเหตุการณ์ focus ใน HTML แต่สามารถนำไปใช้กับองค์ประกอบใดๆ ก็ได้ที่สามารถรับโฟกัสได้ | ใช่ | เลขที่ |
| โฟกัสเอาท์ | (ไม่มี) | คล้ายกับเหตุการณ์ blur ใน HTML แต่สามารถใช้กับองค์ประกอบใดๆ ที่สามารถโฟกัสได้ | ใช่ | เลขที่ | |
| DOMActivate | (ไม่มี) | คล้ายกับเหตุการณ์คำสั่ง XUL จะเกิดขึ้นเมื่อมีการเปิดใช้งานองค์ประกอบ เช่น ผ่านการคลิกเมาส์หรือการกดปุ่ม | ใช่ | ใช่ | |
| การกลายพันธุ์ | DOMSubtreeModified | (ไม่มี) | ข้อผิดพลาดจะเกิดขึ้นเมื่อมีการแก้ไขโครงสร้างย่อย | ใช่ | เลขที่ |
| DOMNodeInserted | (ไม่มี) | เหตุการณ์นี้เกิดขึ้นเมื่อมีการเพิ่มโหนดเป็นโหนดลูกของโหนดอื่น | ใช่ | เลขที่ | |
| DOMNodeRemoved | (ไม่มี) | ฟังก์ชันนี้จะทำงานเมื่อโหนดถูกลบออกจากโครงสร้าง DOM | ใช่ | เลขที่ | |
| DOMNodeRemovedFromDocument | (ไม่มี) | สัญญาณเตือนจะทำงานเมื่อมีการลบโหนดออกจากเอกสาร | เลขที่ | เลขที่ | |
| DOMNodeInsertedIntoDocument | (ไม่มี) | สัญญาณเตือนจะทำงานเมื่อมีการแทรกโหนดลงในเอกสาร | เลขที่ | เลขที่ | |
| DOMAttrModified | (ไม่มี) | เมื่อมีการแก้ไขแอตทริบิวต์ จะทำงานเมื่อมีการเปลี่ยนแปลงแอตทริบิวต์ | ใช่ | เลขที่ | |
| DOMCharacterDataModified | (ไม่มี) | ข้อผิดพลาดนี้เกิดขึ้นเมื่อข้อมูลตัวละครถูกแก้ไข | ใช่ | เลขที่ | |
| ความคืบหน้า | โหลดเริ่ม | (ไม่มี) | ความคืบหน้าได้เริ่มต้นขึ้นแล้ว | เลขที่ | เลขที่ |
| ความคืบหน้า | (ไม่มี) | กำลังดำเนินการ หลังจากส่งคำสั่ง loadstart แล้ว | เลขที่ | เลขที่ | |
| ข้อผิดพลาด | (ไม่มี) | การดำเนินการล้มเหลว หลังจากส่งคำสั่งดำเนินการครั้งสุดท้ายแล้ว หรือหลังจากส่งคำสั่งเริ่มโหลดแล้ว หากยังไม่ได้ส่งคำสั่งดำเนินการใดๆ | เลขที่ | เลขที่ | |
| แท้งลูก | (ไม่มี) | การดำเนินการจะสิ้นสุดลง หลังจากส่งคำสั่งการดำเนินการสุดท้ายแล้ว หรือหลังจากส่งคำสั่งเริ่มโหลดแล้ว หากยังไม่มีการส่งคำสั่งการดำเนินการใดๆ | เลขที่ | เลขที่ | |
| โหลด | (ไม่มี) | การดำเนินการสำเร็จลุล่วงด้วยดี หลังจากส่งคำสั่งดำเนินการครั้งสุดท้ายแล้ว หรือหลังจากส่งคำสั่งเริ่มโหลดแล้ว หากยังไม่ได้ส่งคำสั่งดำเนินการใดๆ | เลขที่ | เลขที่ | |
| โหลดสิ้นสุด | (ไม่มี) | การดำเนินการหยุดชะงักลง หลังจากมีการส่งคำสั่งผิดพลาด ยกเลิก หรือโหลดข้อมูลอย่างใดอย่างหนึ่ง | เลขที่ | เลขที่ |
โปรดทราบว่าเหตุการณ์ที่มีชื่อขึ้นต้นด้วย "DOM" นั้นยังไม่ได้รับการสนับสนุนอย่างดีในปัจจุบัน และด้วยเหตุผลนี้และเหตุผลด้านประสิทธิภาพอื่นๆ จึงถูกยกเลิกการใช้งานโดย W3C ใน DOM Level 3 Mozilla และ Opera รองรับ DOMAttrModified , DOMNodeInserted , DOMNodeRemoved และ DOMCharacterDataModified ส่วน Chrome และ Safari รองรับเหตุการณ์เหล่านี้ ยกเว้นDOMAttrModified
กิจกรรมสัมผัส
เว็บเบราว์เซอร์ที่ทำงานบน อุปกรณ์ ที่รองรับการสัมผัสเช่นiOS ของ Apple และ Androidของ Google จะสร้างเหตุการณ์เพิ่มเติม[ 9 ] : §5.3
| หมวดหมู่ | พิมพ์ | คุณลักษณะ | คำอธิบาย | ฟองอากาศ | ยกเลิกได้ |
|---|---|---|---|---|---|
| สัมผัส | ทัชสตาร์ท | จะทำงานเมื่อวางนิ้วลงบนพื้นผิวสัมผัส/หน้าจอ | ใช่ | ใช่ | |
| ทัชเอนด์ | จะทำงานเมื่อยกนิ้วออกจากหน้าจอสัมผัส | ใช่ | ใช่ | ||
| ทัชมูฟ | ฟังก์ชันนี้ทำงานเมื่อมีการเลื่อนนิ้วที่วางอยู่บนหน้าจอแล้วไปทั่วหน้าจอ | ใช่ | ใช่ | ||
| ทัชเอนเตอร์ | เหตุการณ์นี้เกิดขึ้นเมื่อจุดสัมผัสเคลื่อนเข้าไปในพื้นที่โต้ตอบที่กำหนดโดยองค์ประกอบ DOM | ใช่ | ใช่ | ||
| สัมผัสและออกจากระบบ | เหตุการณ์นี้จะเกิดขึ้นเมื่อจุดสัมผัสเคลื่อนออกนอกพื้นที่โต้ตอบที่กำหนดโดยองค์ประกอบ DOM | ใช่ | ใช่ | ||
| ยกเลิกด้วยการแตะ | ตัวแทนผู้ใช้ต้องส่งเหตุการณ์ประเภทนี้เพื่อระบุเมื่อ TouchPoint ถูกขัดจังหวะในลักษณะเฉพาะของการใช้งาน เช่น การเคลื่อนที่ออกนอกขอบเขตของหน้าต่าง UA ตัวแทนผู้ใช้อาจส่งเหตุการณ์ประเภทนี้เมื่อผู้ใช้วางจุดสัมผัส (จุดพิกัดที่ตัวชี้ (เช่น นิ้วหรือสไตลัส) ตัดกับพื้นผิวเป้าหมายของอินเทอร์เฟซ) บนพื้นผิวสัมผัสมากกว่าที่อุปกรณ์หรือการใช้งานได้รับการกำหนดค่าให้จัดเก็บ ในกรณีนี้วัตถุ TouchPoint ที่เก่าที่สุดใน TouchList ควรถูกลบออก[ 9 ] : §5.9 | ใช่ | เลขที่ |
ในร่างคำแนะนำของW3CTouchEventจะมีการให้ตำแหน่งTouchListของคีย์ตัวแก้ไขที่ใช้งานอยู่ตำแหน่งขององค์ประกอบ DOM ที่กำหนดเป้าหมาย และ ตำแหน่ง ของสิ่งที่เปลี่ยนแปลงไปตั้งแต่ครั้งก่อน[ 9 ]TouchTouchListTouchTouchListTouchTouchEvent
Appleไม่ได้เข้าร่วมกลุ่มทำงานนี้ และทำให้ W3C เลื่อนการแนะนำข้อกำหนด Touch Events ออกไปโดยการเปิดเผยสิทธิบัตรในช่วงท้ายของกระบวนการแนะนำ[ 10 ]
เหตุการณ์ตัวชี้
เว็บเบราว์เซอร์บนอุปกรณ์ที่มีอุปกรณ์ป้อนข้อมูลหลายประเภท รวมถึงเมาส์ แผงสัมผัส และปากกา อาจสร้างเหตุการณ์ป้อนข้อมูลแบบบูรณาการ ผู้ใช้สามารถดูได้ว่าอุปกรณ์ป้อนข้อมูลประเภทใดถูกกด ปุ่มใดถูกกดบนอุปกรณ์นั้น และปุ่มนั้นถูกกดแรงแค่ไหนเมื่อใช้ปากกาสไตลัส ณ เดือนตุลาคม 2556 เหตุการณ์นี้รองรับเฉพาะ Internet Explorer 10 และ 11 เท่านั้น[ 11 ]
| หมวดหมู่ | พิมพ์ | คุณลักษณะ | คำอธิบาย | ฟองอากาศ | ยกเลิกได้ |
|---|---|---|---|---|---|
| ตัวชี้ | ชี้ลง | ออนพอยเตอร์ดาวน์ | ฟังก์ชันนี้จะทำงานเมื่อกดปุ่มบนอุปกรณ์ชี้ตำแหน่ง หรือกดทับองค์ประกอบใดองค์ประกอบหนึ่ง | ใช่ | ใช่ |
| ชี้ขึ้น | ออนพอยน์เตอร์อัพ | ฟังก์ชันนี้จะทำงานเมื่อปล่อยปุ่มบนอุปกรณ์ชี้ตำแหน่งเหนือองค์ประกอบใดองค์ประกอบหนึ่ง | ใช่ | ใช่ | |
| ยกเลิกตัวชี้ | ยกเลิกจุด | เหตุการณ์นี้จะเกิดขึ้นเมื่ออุปกรณ์ชี้ตำแหน่งไม่น่าจะสร้างเหตุการณ์ต่อไปได้อีกแล้ว เช่น เนื่องจากอุปกรณ์นั้นถูกใช้สำหรับการเลื่อน/ซูมหลังจากเหตุการณ์ชี้ลง (pointerdown) | ใช่ | ใช่ | |
| การเคลื่อนที่ของตัวชี้ | การเคลื่อนที่ของตัวชี้ | จะทำงานเมื่ออุปกรณ์ชี้เป้าเคลื่อนที่ขณะอยู่เหนือองค์ประกอบใดองค์ประกอบหนึ่ง | ใช่ | ใช่ | |
| ชี้ไปที่ | เมื่อชี้ไปยังตำแหน่งอื่น | จะทำงานเมื่ออุปกรณ์ชี้ตำแหน่งถูกเลื่อนไปที่องค์ประกอบใดองค์ประกอบหนึ่ง | ใช่ | ใช่ | |
| ชี้ให้เห็น | ชี้ออก | ฟังก์ชันนี้จะทำงานเมื่อเลื่อนอุปกรณ์ชี้เมาส์ออกจากองค์ประกอบ นอกจากนี้ยังทำงานหลังจากปล่อยอุปกรณ์ชี้เมาส์โดยไม่ได้วางเมาส์เหนือองค์ประกอบ หรือหลังจาก | ใช่ | ใช่ | |
| ตัวชี้เข้า | เมื่อกดตัวชี้ | เหตุการณ์นี้จะเกิดขึ้นเมื่ออุปกรณ์ชี้เมาส์ถูกเลื่อนไปยังองค์ประกอบใดองค์ประกอบหนึ่ง หรือเมื่อกดปุ่มของอุปกรณ์ชี้เมาส์ที่ไม่รองรับการวางเมาส์เหนือองค์ประกอบนั้น บนองค์ประกอบย่อยใดองค์ประกอบหนึ่ง | เลขที่ | ใช่ | |
| ใบชี้ | ออกจากจุดชี้ | เหตุการณ์นี้จะเกิดขึ้นเมื่อเลื่อนอุปกรณ์ชี้เมาส์ออกจากองค์ประกอบ หรือเมื่อปล่อยปุ่มของอุปกรณ์ชี้เมาส์ที่ไม่รองรับการวางเมาส์เหนือองค์ประกอบย่อยของมัน | เลขที่ | ใช่ | |
| ได้ตัวจับภาพแล้ว | จับภาพพอยน์เตอร์ | เหตุการณ์นี้เกิดขึ้นเมื่อตัวชี้ถูกจับโดยเมธอด setPointerCapture | ใช่ | เลขที่ | |
| การจับจุดหาย | การจับจุดหาย | ฟังก์ชันนี้จะทำงานเมื่อตัวชี้ถูกปล่อยโดยเมธอด releasePointerCapture | ใช่ | เลขที่ |
กิจกรรม UI อิสระ
แม้ว่าจะยังไม่ได้นำไปใช้งานจริง แต่กลุ่มทำงาน Indie UI ต้องการช่วยเหลือนักพัฒนาเว็บแอปพลิเคชันให้สามารถรองรับเหตุการณ์การโต้ตอบของผู้ใช้มาตรฐานโดยไม่ต้องจัดการกับเหตุการณ์ทางเทคนิคเฉพาะแพลตฟอร์มต่างๆ ที่อาจตรงกัน[ 12 ]
การเขียนสคริปต์เพื่อสร้างอินเทอร์เฟซที่ใช้งานง่ายนั้นอาจเป็นเรื่องยาก โดยเฉพาะอย่างยิ่งเมื่อพิจารณาว่ารูปแบบการออกแบบอินเทอร์เฟซผู้ใช้แตกต่างกันไปตามแพลตฟอร์มซอฟต์แวร์ ฮาร์ดแวร์ และภาษาต่างๆ และการโต้ตอบเหล่านั้นยังสามารถปรับแต่งเพิ่มเติมได้ตามความชอบส่วนบุคคล แต่ละคนคุ้นเคยกับวิธีการทำงานของอินเทอร์เฟซบนระบบของตนเอง และอินเทอร์เฟซที่พวกเขาชื่นชอบมักจะแตกต่างจากอินเทอร์เฟซที่ผู้เขียนเว็บแอปพลิเคชันชื่นชอบ
ตัวอย่างเช่น ผู้พัฒนาเว็บแอปพลิเคชันที่ต้องการดักจับความตั้งใจของผู้ใช้ในการยกเลิกการกระทำครั้งล่าสุด จำเป็นต้อง "รับฟัง" เหตุการณ์ต่อไปนี้ทั้งหมด:
- กด Ctrl+Z บน Windows และ Linux
- กด Command+Z บน Mac OS X
- ฟังก์ชันการเขย่าบนอุปกรณ์มือถือบางรุ่น
จะง่ายกว่าหากรับฟังคำขอเดียวที่ได้มาตรฐานเพื่อ "ยกเลิก" การกระทำก่อนหน้านี้
| หมวดหมู่ | พิมพ์ | คำอธิบาย | ฟองอากาศ | ยกเลิกได้ |
|---|---|---|---|---|
| ขอ | ไม่ได้รับการร้องขอ | ระบุว่าผู้ใช้ต้องการ "ยกเลิก" การกระทำก่อนหน้า (อาจถูกแทนที่ด้วยอินเทอร์เฟซ UndoManager) | ใช่ | ใช่ |
| ขอใหม่ | ระบุว่าผู้ใช้ต้องการ "ทำซ้ำ" การกระทำที่ "ยกเลิก" ไปก่อนหน้านี้ (อาจถูกแทนที่ด้วยอินเทอร์เฟซ UndoManager) | ใช่ | เลขที่ | |
| ขยายคำขอ | แสดงว่าผู้ใช้ต้องการเปิดเผยข้อมูลในส่วนที่ยุบ (เช่น วิดเจ็ตการเปิดเผยข้อมูล) หรือโหนดสาขาในลำดับชั้น (เช่นมุมมองแบบต้นไม้ ) | ใช่ | ใช่ | |
| ยุบคำขอ | ระบุว่าผู้ใช้ต้องการซ่อนหรือยุบข้อมูลในส่วนที่ขยายออก (เช่น วิดเจ็ตการเปิดเผยข้อมูล) หรือโหนดสาขาในลำดับชั้น (เช่น มุมมองแบบต้นไม้) | ใช่ | ใช่ | |
| ยกเลิกคำขอ | แสดงว่าผู้ใช้ต้องการ "ปิด" มุมมองปัจจุบัน (เช่น การยกเลิกกล่องโต้ตอบ หรือการปิดเมนูแบบป๊อปอัพ) | ใช่ | ใช่ | |
| ลบคำขอ | แสดงว่าผู้ใช้ต้องการเริ่มดำเนินการ "ลบ" กับองค์ประกอบหรือมุมมองปัจจุบันที่ถูกทำเครื่องหมายไว้ | ใช่ | ใช่ | |
| คำขอโฟกัส | คำขอโฟกัสทิศทาง | เหตุการณ์นี้เริ่มต้นเมื่อเอเจนต์ผู้ใช้ส่งคำขอ "โฟกัสทิศทาง" ไปยังเว็บแอปพลิเคชัน ผู้พัฒนาเว็บไม่ควรใช้หรือลงทะเบียนเหตุการณ์ directionalfocusrequest หากเหตุการณ์โฟกัสและเบลอมาตรฐานของเบราว์เซอร์ก็เพียงพอแล้ว การใช้เหตุการณ์เหล่านี้โดยไม่จำเป็นอาจส่งผลให้ประสิทธิภาพลดลงหรือประสบการณ์การใช้งานของผู้ใช้แย่ลง | ใช่ | ใช่ |
| คำขอโฟกัสเชิงเส้น | เหตุการณ์นี้เริ่มต้นเมื่อเอเจนต์ผู้ใช้ส่งคำขอ "โฟกัสเชิงเส้น" ไปยังเว็บแอปพลิเคชัน ผู้พัฒนาเว็บไม่ควรใช้หรือลงทะเบียนเหตุการณ์ linearfocusrequest เมื่อเหตุการณ์โฟกัสและเบลอมาตรฐานของเบราว์เซอร์เพียงพอแล้ว เหตุการณ์ประเภทนี้จำเป็นเฉพาะกับประเภทควบคุมพิเศษ เช่น ตารางข้อมูล ที่องค์ประกอบถัดไปเชิงตรรกะอาจไม่สามารถโฟกัสได้ หรืออาจไม่อยู่ใน DOM จนกว่าจะมีการร้องขอ การใช้เหตุการณ์เหล่านี้โดยไม่จำเป็นอาจส่งผลให้ประสิทธิภาพลดลงหรือประสบการณ์ผู้ใช้ที่ไม่ดี | ใช่ | ใช่ | |
| คำขอโฟกัสพาเล็ต | เหตุการณ์นี้เริ่มต้นเมื่อเอเจนต์ผู้ใช้ส่งคำขอ "โฟกัสพาเล็ต" ไปยังเว็บแอปพลิเคชัน ผู้เขียนเว็บแอปพลิเคชันที่ได้รับเหตุการณ์นี้ควรย้ายโฟกัสไปยังพาเล็ตแรกในเว็บแอปพลิเคชัน หรือวนโฟกัสระหว่างพาเล็ตที่มีอยู่ทั้งหมด หมายเหตุ: บางครั้งพาเล็ตอาจถูกเรียกว่ากล่องโต้ตอบที่ไม่ใช่โมดอลหรือหน้าต่างตรวจสอบ | ใช่ | ใช่ | |
| คำขอโฟกัสแถบเครื่องมือ | เหตุการณ์นี้จะเริ่มต้นเมื่อเอเจนต์ผู้ใช้ส่งคำขอ "โฟกัสแถบเครื่องมือ" ไปยังเว็บแอปพลิเคชัน ผู้พัฒนาเว็บแอปพลิเคชันที่ได้รับเหตุการณ์นี้ควรย้ายโฟกัสไปยังแถบเครื่องมือหลักในเว็บแอปพลิเคชัน หรือสลับโฟกัสระหว่างแถบเครื่องมือที่มีอยู่ทั้งหมด | ใช่ | ใช่ | |
| คำขอการจัดการ | คำขอเคลื่อนย้าย | การทำงานจะเริ่มต้นเมื่อเอเจนต์ผู้ใช้ส่งคำขอเคลื่อนย้ายไปยังเว็บแอปพลิเคชันพร้อมค่าเดลต้า x/y ที่เกี่ยวข้อง ตัวอย่างเช่น ใช้ในการย้ายวัตถุไปยังตำแหน่งใหม่บนผืนผ้าใบสำหรับจัดวางเลย์เอาต์ | ใช่ | ใช่ |
| คำขอแพน | กระบวนการนี้จะเริ่มต้นเมื่อเอเจนต์ผู้ใช้ส่งคำขอเลื่อนไปยังเว็บแอปพลิเคชันพร้อมค่าเดลต้า x/y ที่เกี่ยวข้อง ตัวอย่างเช่น จะใช้เมื่อเปลี่ยนจุดศูนย์กลางขณะเลื่อนแผนที่หรือโปรแกรมดูภาพแบบกำหนดเองอื่นๆ | ใช่ | ใช่ | |
| คำขอหมุนเวียน | กระบวนการนี้เริ่มต้นเมื่อเอเจนต์ผู้ใช้ส่งคำขอหมุนภาพไปยังเว็บแอปพลิเคชัน พร้อมด้วยค่าพิกัด x/y และค่าการหมุนเป็นองศา | ใช่ | ใช่ | |
| คำขอซูม | กระบวนการนี้จะเริ่มต้นเมื่อเอเจนต์ผู้ใช้ส่งคำขอซูมไปยังเว็บแอปพลิเคชัน พร้อมด้วยค่าพิกัด x/y ต้นทางและปัจจัยการซูม | ใช่ | ใช่ | |
| คำขอเลื่อน | คำขอเลื่อน | เหตุการณ์นี้จะเริ่มต้นเมื่อเอเจนต์ผู้ใช้ส่งคำขอเลื่อนไปยังเว็บแอปพลิเคชันพร้อมค่าเดลต้า x/y หรือค่า scrollType อื่นๆ ที่กำหนดไว้ ผู้เขียนควรใช้เหตุการณ์และ uiaction นี้กับมุมมองการเลื่อนแบบกำหนดเองเท่านั้น | ใช่ | ใช่ |
| คำขอเปลี่ยนแปลงค่า | คำขอเปลี่ยนค่า | เริ่มทำงานเมื่อเอเจนต์ผู้ใช้ส่งคำขอเปลี่ยนแปลงค่าไปยังเว็บแอปพลิเคชัน ใช้กับตัวควบคุมช่วงค่าแบบกำหนดเอง เช่น สไลเดอร์ วงล้อภาพ ฯลฯ | ใช่ | ใช่ |
เหตุการณ์เฉพาะสำหรับ Internet Explorer
นอกเหนือจากเหตุการณ์ทั่วไป (ตามมาตรฐาน W3C) แล้วInternet Explorer ยังเพิ่มเหตุการณ์หลักอีกสองประเภท เหตุการณ์บางอย่างได้รับการนำไปใช้เป็นมาตรฐานโดยพฤตินัยโดยเบราว์เซอร์อื่นๆ แล้ว
- เหตุการณ์คลิปบอร์ด
- เหตุการณ์การผูกข้อมูล
| หมวดหมู่ | พิมพ์ | คุณลักษณะ | คำอธิบาย | ฟองอากาศ | ยกเลิกได้ |
|---|---|---|---|---|---|
| คลิปบอร์ด | ตัด | ออนคัท | คำสั่งนี้ทำงานหลังจากคัดลอกข้อความที่เลือกไปยังคลิปบอร์ดแล้ว | ใช่ | ใช่ |
| สำเนา | ออนคอปปี้ | จะทำงานหลังจากคัดลอกสิ่งที่เลือกไปยังคลิปบอร์ดแล้ว | ใช่ | ใช่ | |
| แปะ | ออนเพสต์ | ฟังก์ชันนี้จะทำงานหลังจากวางข้อความที่เลือกจากคลิปบอร์ดแล้ว | ใช่ | ใช่ | |
| ก่อนตัด | ก่อนตัด | คำสั่งนี้ทำงานก่อนที่จะคัดลอกข้อความที่เลือกไปยังคลิปบอร์ด | ใช่ | ใช่ | |
| ก่อนคัดลอก | ก่อนคัดลอก | จะทำงานก่อนที่จะคัดลอกส่วนที่เลือกไปยังคลิปบอร์ด | ใช่ | ใช่ | |
| ก่อนวาง | ก่อนวาง | ฟังก์ชันนี้จะทำงานก่อนที่จะวางข้อความที่เลือกจากคลิปบอร์ด | ใช่ | ใช่ | |
| การผูกข้อมูล | หลังการอัปเดต | หลังจากอัปเดตแล้ว | ฟังก์ชันนี้ทำงานทันทีหลังจากมีการอัปเดตอ็อบเจ็กต์ที่ผูกกับข้อมูล | ใช่ | เลขที่ |
| ก่อนอัปเดต | ก่อนอัปเดต | จะทำงานก่อนที่แหล่งข้อมูลจะได้รับการอัปเดต | ใช่ | ใช่ | |
| การเปลี่ยนแปลงเซลล์ | การเปลี่ยนเซลล์ครั้งเดียว | ข้อผิดพลาดนี้เกิดขึ้นเมื่อแหล่งข้อมูลมีการเปลี่ยนแปลง | ใช่ | เลขที่ | |
| ข้อมูลพร้อมใช้งาน | มีข้อมูลพร้อมใช้งาน | ฟังก์ชันนี้จะทำงานเมื่อมีข้อมูลใหม่จากแหล่งข้อมูลเข้ามา | ใช่ | เลขที่ | |
| ชุดข้อมูลเปลี่ยนแปลง | ondatasetchanged | ข้อผิดพลาดนี้เกิดขึ้นเมื่อเนื้อหาในแหล่งข้อมูลมีการเปลี่ยนแปลง | ใช่ | เลขที่ | |
| ชุดข้อมูลสมบูรณ์ | ondatasetcomplete | จะเกิดข้อผิดพลาดเมื่อการถ่ายโอนข้อมูลจากแหล่งข้อมูลเสร็จสมบูรณ์ | ใช่ | เลขที่ | |
| อัปเดตข้อผิดพลาด | อัปเดตข้อผิดพลาด | ฟังก์ชันนี้จะทำงานเมื่อเกิดข้อผิดพลาดขณะอัปเดตฟิลด์ข้อมูล | ใช่ | เลขที่ | |
| แถวเข้า | ออนโรว์เอนเตอร์ | ฟังก์ชันนี้จะทำงานเมื่อมีข้อมูลแถวใหม่จากแหล่งข้อมูลพร้อมใช้งาน | ใช่ | เลขที่ | |
| ออกจากแถว | ออกจากแถว | ฟังก์ชันนี้จะทำงานเมื่อการประมวลผลข้อมูลแถวหนึ่งจากแหล่งข้อมูลเสร็จสิ้นลงแล้ว | เลขที่ | ใช่ | |
| ลบแถว | onrowsdelete | ฟังก์ชันนี้จะทำงานเมื่อมีการลบแถวข้อมูลออกจากแหล่งข้อมูล | ใช่ | เลขที่ | |
| แทรกแถว | แถวที่แทรก | ฟังก์ชันนี้จะทำงานเมื่อมีการแทรกแถวข้อมูลจากแหล่งข้อมูล | ใช่ | เลขที่ | |
| หนู | เมนูบริบท | เมนูบริบท | เหตุการณ์นี้เกิดขึ้นเมื่อเมนูบริบทปรากฏขึ้น | ใช่ | ใช่ |
| ลาก | ออนแดรก | ฟังก์ชันนี้จะทำงานเมื่อมีการลากเมาส์ (บนองค์ประกอบที่กำลังเคลื่อนที่) | ใช่ | ใช่ | |
| ดรากสตาร์ท | ondragstart | ฟังก์ชันนี้จะทำงานเมื่อเริ่มลากเมาส์ (บนองค์ประกอบที่กำลังเคลื่อนที่) | ใช่ | ใช่ | |
| ดราเกนเตอร์ | ออนดราเจนเตอร์ | จะเกิดเหตุการณ์เมื่อมีการลากสิ่งใดสิ่งหนึ่งไปวางบนพื้นที่เป้าหมาย (บนองค์ประกอบเป้าหมาย) | ใช่ | ใช่ | |
| ลาก | ออนแดรกโอเวอร์ | จะทำงานเมื่อลากเมาส์ค้างไว้เหนือบริเวณใดบริเวณหนึ่ง (บนองค์ประกอบเป้าหมาย) | ใช่ | ใช่ | |
| ลากออกจาก | ออนดรากลีฟ | จะเกิดการยิงเมื่อมีบางสิ่งถูกลากออกจากพื้นที่ (บนองค์ประกอบเป้าหมาย) | ใช่ | ใช่ | |
| ดราเจนด์ | ออนดราเกนด์ | เหตุการณ์นี้จะเกิดขึ้นเมื่อการลากเมาส์สิ้นสุดลง (บนองค์ประกอบที่กำลังเคลื่อนที่) | ใช่ | ใช่ | |
| หยด | ออนดรอป | ฟังก์ชันนี้จะทำงานเมื่อปล่อยปุ่มเมาส์เหนือเป้าหมายที่ถูกต้องในระหว่างการลาก (บนองค์ประกอบเป้าหมาย) | ใช่ | ใช่ | |
| เลือกเริ่ม | onselectstart | เหตุการณ์นี้จะเกิดขึ้นเมื่อผู้ใช้เริ่มเลือกข้อความ | ใช่ | ใช่ | |
| แป้นพิมพ์ | ช่วย | ช่วยเหลือ | เหตุการณ์นี้เกิดขึ้นเมื่อผู้ใช้เริ่มขอความช่วยเหลือ | ใช่ | ใช่ |
| เฟรม/ออบเจ็กต์ HTML | ก่อนขนถ่าย | ก่อนโหลด | จะทำงานก่อนที่เอกสารจะถูกยกเลิกการโหลด | เลขที่ | ใช่ |
| หยุด | หยุด | เหตุการณ์นี้จะเกิดขึ้นเมื่อผู้ใช้หยุดการโหลดวัตถุ (ต่างจากเหตุการณ์ยกเลิก เหตุการณ์หยุดสามารถแนบไปกับเอกสารได้) | เลขที่ | เลขที่ | |
| แบบฟอร์ม HTML | ก่อนแก้ไขโฟกัส | ก่อนแก้ไขโฟกัส | ยิงก่อนที่องค์ประกอบจะได้รับโฟกัสสำหรับการแก้ไข | ใช่ | ใช่ |
| มาร์กี | เริ่ม | ออนสตาร์ท | ไฟจะสว่างขึ้นเมื่อป้ายไฟเริ่มวนรอบใหม่ | เลขที่ | เลขที่ |
| เสร็จ | เสร็จสิ้น | ยิงเมื่อการวนซ้ำของป้ายไฟเสร็จสมบูรณ์ | เลขที่ | ใช่ | |
| กระเด้ง | ออนบาวน์ | เกิดข้อผิดพลาดเมื่อข้อความเลื่อนเด้งกลับไปในทิศทางตรงกันข้าม | เลขที่ | ใช่ | |
| เบ็ดเตล็ด | ก่อนพิมพ์ | ก่อนพิมพ์ | ยิงก่อนที่เอกสารจะถูกพิมพ์ | เลขที่ | เลขที่ |
| หลังจากพิมพ์แล้ว | หลังจากพิมพ์เสร็จแล้ว | ทำงานทันทีหลังจากพิมพ์เอกสารเสร็จ | เลขที่ | เลขที่ | |
| การเปลี่ยนแปลงทรัพย์สิน | การเปลี่ยนแปลงทรัพย์สิน | สัญญาณเตือนจะดังขึ้นเมื่อคุณสมบัติของวัตถุมีการเปลี่ยนแปลง | เลขที่ | เลขที่ | |
| การเปลี่ยนตัวกรอง | onfilterchange | ฟังก์ชันนี้จะทำงานเมื่อตัวกรองมีการเปลี่ยนแปลงคุณสมบัติหรือสิ้นสุดการเปลี่ยนสถานะ | เลขที่ | เลขที่ | |
| การเปลี่ยนแปลงสถานะพร้อมแล้ว | onreadystatechange | ฟังก์ชันนี้จะทำงานเมื่อคุณสมบัติ readyState ขององค์ประกอบมีการเปลี่ยนแปลง | เลขที่ | เลขที่ | |
| สูญเสียการจับภาพ | การสูญเสียการจับภาพ | จะทำงานเมื่อมีการเรียกใช้เมธอด releaseCapture | เลขที่ | เลขที่ |
โปรดทราบว่า Mozilla, Safari และ Opera รองรับเหตุการณ์ readystatechange สำหรับ อ็อบเจ็กต์ XMLHttpRequest ด้วย นอกจากนี้ Mozilla ยังรองรับเหตุการณ์ beforeunload โดยใช้วิธีการลงทะเบียนเหตุการณ์แบบดั้งเดิม (DOM Level 0) Mozilla และ Safari ยังรองรับ contextmenu แต่ Internet Explorer สำหรับ Mac ไม่รองรับ
โปรดทราบว่า Firefox เวอร์ชัน 6 ขึ้นไปรองรับเหตุการณ์ beforeprint และ afterprint
กิจกรรม XUL
นอกเหนือจากเหตุการณ์ทั่วไป (ตามมาตรฐาน W3C) แล้ว Mozilla ยังได้กำหนดชุดเหตุการณ์ที่ใช้งานได้เฉพาะกับองค์ประกอบ XUL เท่านั้น
| หมวดหมู่ | พิมพ์ | คุณลักษณะ | คำอธิบาย | ฟองอากาศ | ยกเลิกได้ |
|---|---|---|---|---|---|
| หนู | ดอมมูสสครอลล์ | ดอมมูสสครอลล์ | ฟังก์ชันนี้จะทำงานเมื่อเลื่อนล้อเมาส์ ทำให้เนื้อหาเลื่อนตาม | ใช่ | ใช่ |
| ลากและวาง | เมื่อลากและวาง | เหตุการณ์นี้จะเกิดขึ้นเมื่อผู้ใช้ปล่อยปุ่มเมาส์เพื่อวางวัตถุที่กำลังลากอยู่ | เลขที่ | เลขที่ | |
| ดราเกนเตอร์ | ออนดราเจนเตอร์ | เหตุการณ์นี้จะเกิดขึ้นเมื่อตัวชี้เมาส์เคลื่อนไปอยู่เหนือองค์ประกอบเป็นครั้งแรกในระหว่างการลาก คล้ายกับเหตุการณ์ mouseover แต่จะเกิดขึ้นในขณะที่กำลังลากอยู่ | เลขที่ | เลขที่ | |
| ลากออก | ออนดราจเอ็กซ์ิต | เหตุการณ์นี้จะเกิดขึ้นเมื่อตัวชี้เมาส์เคลื่อนออกจากองค์ประกอบในระหว่างการลาก นอกจากนี้ยังเกิดขึ้นหลังจากวางเมาส์บนองค์ประกอบแล้วด้วย เหตุการณ์นี้คล้ายกับเหตุการณ์ mouseout แต่เกิดขึ้นในระหว่างการลาก | เลขที่ | เลขที่ | |
| ลากท่าทาง | ออนแดรกเกเจอร์ | เหตุการณ์นี้จะเกิดขึ้นเมื่อผู้ใช้เริ่มลากองค์ประกอบ โดยปกติจะทำได้โดยการกดปุ่มเมาส์ค้างไว้แล้วเลื่อนเมาส์ | เลขที่ | เลขที่ | |
| ลาก | ออนแดรกโอเวอร์ | เหตุการณ์นี้เกี่ยวข้องกับเหตุการณ์ mousemove โดยจะเกิดขึ้นเมื่อมีการลากสิ่งใดสิ่งหนึ่งไปวางบนองค์ประกอบใดองค์ประกอบหนึ่ง | เลขที่ | เลขที่ | |
| ป้อนข้อมูล | การเปลี่ยนแปลงสถานะช่องทำเครื่องหมาย | ฟังก์ชันนี้จะทำงานเมื่อมีการเลือกหรือยกเลิกการเลือกช่องทำเครื่องหมาย ไม่ว่าจะโดยผู้ใช้หรือสคริปต์ | เลขที่ | เลขที่ | |
| การเปลี่ยนแปลงสถานะวิทยุ | ฟังก์ชันนี้จะทำงานเมื่อมีการเลือกปุ่มตัวเลือก (radio button) ไม่ว่าจะเป็นโดยผู้ใช้หรือสคริปต์ | เลขที่ | เลขที่ | ||
| ปิด | เมื่อปิด | สัญญาณเตือนจะทำงานเมื่อมีการร้องขอให้ปิดหน้าต่าง | เลขที่ | ใช่ | |
| สั่งการ | ออนคอมมานด์ | คล้ายกับเหตุการณ์ DOMActivate ของ W3C เกิดขึ้นเมื่อองค์ประกอบถูกเปิดใช้งาน เช่น ผ่านการคลิกเมาส์หรือการกดปุ่ม | เลขที่ | เลขที่ | |
| ป้อนข้อมูล | อินพุต | ฟังก์ชันนี้จะทำงานเมื่อผู้ใช้ป้อนข้อความลงในช่องข้อความ | ใช่ | เลขที่ | |
| ส่วนติดต่อผู้ใช้ | DOMMenuItemActive | DOMMenuItemActive | ฟังก์ชันนี้จะทำงานเมื่อมี การวางเมาส์เหนือเมนูหรือรายการเมนู หรือเมื่อ มีการไฮไลต์เมนูหรือรายการนั้น | ใช่ | เลขที่ |
| DOMMenuItemInactive | DOMMenuItemInactive | เหตุการณ์นี้จะเกิดขึ้นเมื่อเมนูหรือรายการเมนูไม่ได้ถูกวางเมาส์เหนือหรือไฮไลต์อีกต่อไป | ใช่ | เลขที่ | |
| เมนูบริบท | เมนูบริบท | เหตุการณ์นี้จะเกิดขึ้นเมื่อผู้ใช้ร้องขอให้เปิดเมนูบริบทสำหรับองค์ประกอบนั้น การกระทำที่จะทำเช่นนี้จะแตกต่างกันไปตามแพลตฟอร์ม แต่โดยทั่วไปจะเป็นการคลิกขวา | เลขที่ | ใช่ | |
| ล้น | โอเวอร์โฟลว์ | แสดงกล่องหรือองค์ประกอบเลย์เอาต์อื่นๆ เมื่อมีพื้นที่ไม่เพียงพอสำหรับการแสดงผลแบบเต็มขนาด | เลขที่ | เลขที่ | |
| overflowchanged | เมื่อโอเวอร์โฟลว์เปลี่ยนแปลง | สัญญาณเตือนจะดังขึ้นเมื่อสถานะการล้นเปลี่ยนแปลง | เลขที่ | เลขที่ | |
| การไหลด้านล่าง | ออนอันเดอร์โฟลว์ | จะเกิดการลุกไหม้เมื่อมีพื้นที่เพียงพอที่จะแสดงผลในขนาดเต็ม | เลขที่ | เลขที่ | |
| ป๊อปอัพซ่อน | ซ่อนป๊อปอัพ | แสดงป๊อปอัพหลังจากที่ถูกซ่อนไว้แล้ว | เลขที่ | เลขที่ | |
| การซ่อนป๊อปอัพ | ซ่อนป๊อปอัพ | จะแสดงป๊อปอัปเมื่อใกล้จะถูกซ่อน | เลขที่ | เลขที่ | |
| แสดงป๊อปอัพ | แสดงป๊อปอัพ | แสดงข้อความแจ้งเตือนในหน้าต่างป๊อปอัพก่อนที่จะเปิดขึ้นมา | เลขที่ | ใช่ | |
| แสดงป๊อปอัพ | แสดงป๊อปอัพ | จะส่งเหตุการณ์ไปยังป๊อปอัพหลังจากเปิดแล้ว คล้ายกับเหตุการณ์ onload ที่ส่งไปยังหน้าต่างเมื่อเปิดหน้าต่างนั้น | เลขที่ | เลขที่ | |
| สั่งการ | ออกอากาศ | ออกอากาศ | วางไว้บนผู้สังเกตการณ์ เหตุการณ์การออกอากาศจะถูกส่งเมื่อคุณลักษณะของผู้ออกอากาศที่กำลังรับฟังมีการเปลี่ยนแปลง | เลขที่ | เลขที่ |
| อัปเดตคำสั่ง | อัปเดตคำสั่ง | ฟังก์ชันนี้จะทำงานเมื่อมีการอัปเดตคำสั่งเกิดขึ้น | เลขที่ | เลขที่ |
กิจกรรมอื่นๆ
สำหรับ Mozilla และ Opera 9 ยังมีเหตุการณ์ที่ไม่ได้รับการบันทึกไว้ที่เรียกว่าDOMContentLoadedและDOMFrameContentLoadedซึ่งจะทำงานเมื่อเนื้อหา DOM ถูกโหลด เหตุการณ์เหล่านี้แตกต่างจาก "load" เนื่องจากจะทำงานก่อนการโหลดไฟล์ที่เกี่ยวข้อง (เช่น รูปภาพ) อย่างไรก็ตาม DOMContentLoaded ได้ถูกเพิ่มเข้าไปในข้อกำหนดHTML 5 แล้ว [ 13 ] เหตุการณ์ DOMContentLoaded ยังถูกนำไปใช้ใน เอ็นจิ้นการเรนเดอร์ Webkitเวอร์ชัน 500 ขึ้นไป[ 14 ] [ 15 ]ซึ่งสอดคล้องกับGoogle ChromeและSafari เวอร์ชัน 3.1 ขึ้นไปทั้งหมด DOMContentLoaded ยังถูกนำไปใช้ในInternet Explorer 9ด้วย[ 16 ]
Opera 9 ยังรองรับเหตุการณ์ Web Forms 2.0 ได้แก่DOMControlValueChanged , invalid , forminputและformchangeด้วย
ลำดับเหตุการณ์
ลองพิจารณาสถานการณ์ที่เป้าหมายเหตุการณ์สองเป้าหมายมีส่วนร่วมในโครงสร้างแบบต้นไม้ทั้งสองเป้าหมายมีตัวรับฟังเหตุการณ์ที่ลงทะเบียนไว้สำหรับประเภทเหตุการณ์เดียวกัน เช่น "คลิก" เมื่อผู้ใช้คลิกที่องค์ประกอบภายใน จะมีสองวิธีที่เป็นไปได้ในการจัดการ:
- กระตุ้นการทำงานขององค์ประกอบจากภายนอกสู่ภายใน (การดักจับเหตุการณ์) โมเดลนี้ถูกนำไปใช้ในNetscape Navigator
- กระตุ้นองค์ประกอบจากภายในสู่ภายนอก ( การแพร่กระจายเหตุการณ์ ) โมเดลนี้ถูกนำไปใช้ใน Internet Explorer และเบราว์เซอร์อื่นๆ[ 17 ]
W3C วางตัวเป็นกลางในการต่อสู้ครั้งนี้[ 18 ] : §1.2
ตามข้อมูลของ W3C เหตุการณ์ต่างๆ จะผ่านสามขั้นตอนเมื่อเป้าหมายของเหตุการณ์นั้นมีส่วนร่วมในโครงสร้างแบบต้นไม้:
- ขั้นตอนการจับภาพ: เหตุการณ์จะเดินทางจากเป้าหมายเหตุการณ์หลักไปยังเป้าหมายของเหตุการณ์ย่อย
- ขั้นตอนเป้าหมาย: เหตุการณ์เคลื่อนที่ผ่านเป้าหมายของเหตุการณ์
- เฟสฟอง ( ไม่บังคับ ): เหตุการณ์จะเดินทางย้อนกลับจากเป้าหมายของเหตุการณ์หนึ่งไปยังเป้าหมายของเหตุการณ์หลัก เฟสฟองจะเกิดขึ้นเฉพาะกับเหตุการณ์ที่มีฟอง (โดยที่
event.bubbles == true)
คุณสามารถดูภาพรวมของลำดับเหตุการณ์นี้ได้ที่https://domevents.dev
การหยุดเหตุการณ์
ในขณะที่เหตุการณ์กำลังแพร่กระจายผ่านผู้รับฟังเหตุการณ์ เหตุการณ์นั้นสามารถหยุดได้ด้วยevent.stopPropagation()หรือevent.stopImmediatePropagation()
event.stopPropagation()กิจกรรมจะหยุดลงเมื่อตัวรับฟังเหตุการณ์ทั้งหมดที่เชื่อมต่อกับเป้าหมายเหตุการณ์ปัจจุบันในขั้นตอนเหตุการณ์ปัจจุบันเสร็จสิ้นแล้วevent.stopImmediatePropagation()เหตุการณ์จะหยุดลงทันทีและจะไม่มีการเรียกใช้ตัวรับฟังเหตุการณ์เพิ่มเติมอีกต่อไป
เมื่อหยุดกิจกรรมแล้ว กิจกรรมนั้นจะไม่ดำเนินต่อไปตามเส้นทางของกิจกรรมอีกต่อไป การหยุดกิจกรรมไม่ได้หมายความว่ากิจกรรมนั้นถูกยกเลิก
กลไกเดิมในการหยุดยั้งเหตุการณ์
- ตั้งค่า
event.cancelBubbleเป็นtrue(อินเทอร์เน็ต เอ็กซ์พลอเรอร์) - ตั้งค่า
event.returnValueคุณสมบัติเป็นfalse
การยกเลิกกิจกรรม
cancelableสามารถยกเลิกกิจกรรมได้โดยการเรียกใช้เมธอด ` discharge event.preventDefault()()` การยกเลิกกิจกรรมจะยกเลิกพฤติกรรมเริ่มต้นของเบราว์เซอร์สำหรับกิจกรรมนั้น เมื่อกิจกรรมถูกยกเลิกevent.defaultPreventedคุณสมบัติ `discharge()` จะถูกตั้งค่าเป็นtrue`true` การยกเลิกกิจกรรมจะไม่หยุดกิจกรรมจากการเดินทางตามเส้นทางของกิจกรรม
วัตถุเหตุการณ์
อ็อบเจ็กต์ Event ให้ข้อมูลมากมายเกี่ยวกับเหตุการณ์เฉพาะเจาะจง รวมถึงข้อมูลเกี่ยวกับองค์ประกอบเป้าหมาย ปุ่มที่กด ปุ่มเมาส์ที่กด ตำแหน่งเมาส์ ฯลฯ น่าเสียดายที่มีความไม่เข้ากันอย่างร้ายแรงระหว่างเบราว์เซอร์ในส่วนนี้ ดังนั้นในบทความนี้จึงกล่าวถึงเฉพาะอ็อบเจ็กต์ Event ของ W3C เท่านั้น
| ชื่อ | พิมพ์ | คำอธิบาย |
|---|---|---|
| พิมพ์ | ดอมสตริง | ชื่อของเหตุการณ์ (ไม่คำนึงถึงตัวพิมพ์ใหญ่เล็กใน DOM ระดับ 2 แต่คำนึงถึงตัวพิมพ์ใหญ่เล็กใน DOM ระดับ 3 [ 19 ] ) |
| เป้า | เป้าหมายกิจกรรม | ใช้เพื่อระบุ EventTarget ที่ส่งเหตุการณ์นั้นไปแต่แรก |
| เป้าหมายปัจจุบัน | เป้าหมายกิจกรรม | ใช้เพื่อระบุ EventTarget ที่กำลังประมวลผล EventListener อยู่ในขณะนี้ |
| เฟสเหตุการณ์ | ชอร์ตที่ไม่มีลายเซ็น | ใช้เพื่อระบุว่าขณะนี้กำลังประเมินขั้นตอนใดของกระบวนการดำเนินงาน |
| ฟองอากาศ | บูลีน | ใช้เพื่อระบุว่าเหตุการณ์นั้นเป็นเหตุการณ์ที่กำลังก่อตัวหรือไม่ |
| ยกเลิกได้ | บูลีน | ใช้เพื่อระบุว่าสามารถป้องกันการกระทำเริ่มต้นของเหตุการณ์นั้นได้หรือไม่ |
| การประทับเวลา | DOMTimeStamp | ใช้เพื่อระบุเวลา (ในหน่วยมิลลิวินาทีเทียบกับยุคเริ่มต้น) ที่เหตุการณ์นั้นถูกสร้างขึ้น |
| ชื่อ | ประเภทอาร์กิวเมนต์ | ชื่ออาร์กิวเมนต์ | คำอธิบาย |
|---|---|---|---|
| หยุดการแพร่กระจาย | เพื่อป้องกันไม่ให้เหตุการณ์ลุกลามต่อไปในระหว่างกระบวนการทำงานของเหตุการณ์ | ||
| ป้องกันค่าเริ่มต้น | เพื่อยกเลิกเหตุการณ์หากสามารถยกเลิกได้ ซึ่งหมายความว่าการกระทำเริ่มต้นใดๆ ที่ระบบจะดำเนินการตามปกติอันเป็นผลมาจากเหตุการณ์นั้นจะไม่เกิดขึ้น | ||
| เหตุการณ์เริ่มต้น | ดอมสตริง | ประเภทเหตุการณ์อาร์กิวเมนต์ | ระบุประเภทของเหตุการณ์ |
| บูลีน | แคนบับเบิลอาร์ก | ระบุว่าเหตุการณ์นั้นสามารถเกิดการลุกลามเป็นฟองได้หรือไม่ | |
| บูลีน | อาร์กิวเมนต์ที่ยกเลิกได้ | ระบุว่าจะสามารถป้องกันการกระทำเริ่มต้นของเหตุการณ์ได้หรือไม่ |
แบบจำลองการจัดการเหตุการณ์
DOM ระดับ 0
รูปแบบการจัดการเหตุการณ์นี้ได้รับการแนะนำโดยNetscape Navigatorและยังคงเป็นรูปแบบที่ใช้งานได้กับเบราว์เซอร์หลากหลายที่สุดจนถึงปี 2005 โดยมีรูปแบบอยู่สองประเภท ได้แก่ รูปแบบอินไลน์และรูปแบบดั้งเดิม
แบบจำลองอินไลน์
ในโมเดลอินไลน์[ 20 ]ตัวจัดการเหตุการณ์จะถูกเพิ่มเป็นแอตทริบิวต์ขององค์ประกอบ ในตัวอย่างด้านล่างกล่องโต้ตอบแจ้งเตือนที่มีข้อความ "Hey Joe" จะปรากฏขึ้นหลังจาก คลิก ไฮเปอร์ลิงก์การกระทำการคลิกเริ่มต้นจะถูกยกเลิกโดยการส่งค่า false ในตัวจัดการเหตุการณ์
< ! doctype html> < html lang = " en" ><head> < meta charset = " utf - 8" > <title> การจัดการเหตุการณ์แบบอินไลน์</title> </head> <body>< h1 >การจัดการเหตุการณ์แบบอินไลน์</ h1 ><p> เฮ้<a href="http://www.example.com" > โจ</a> ! </p><script> function triggerAlert ( name ) { window.alert ( " Hey " + name ) ; } </script> </body> </html>ความเข้าใจผิดที่พบบ่อยอย่างหนึ่งเกี่ยวกับโมเดลอินไลน์คือความเชื่อที่ว่ามันอนุญาตให้ลงทะเบียนตัวจัดการเหตุการณ์ด้วยอาร์กิวเมนต์แบบกำหนดเอง เช่นnameในtriggerAlertฟังก์ชัน แม้ว่าในตัวอย่างข้างต้นอาจดูเหมือนเป็นเช่นนั้น แต่สิ่งที่เกิดขึ้นจริงคือเอนจิน JavaScriptของเบราว์เซอร์สร้างฟังก์ชันนิรนามที่มีคำสั่งในonclickแอตทริบิวต์onclickตัวจัดการขององค์ประกอบจะถูกผูกไว้กับฟังก์ชันนิรนามต่อไปนี้:
ฟังก์ชัน() { triggerAlert ( 'Joe' ); return false ; }ข้อจำกัดของโมเดลเหตุการณ์ใน JavaScript นี้มักจะแก้ไขได้โดยการกำหนดแอตทริบิวต์ให้กับอ็อบเจ็กต์ฟังก์ชันของตัวจัดการเหตุการณ์ หรือโดยการใช้โคลเชอร์
แบบดั้งเดิม
ในแบบจำลองดั้งเดิม[ 21 ]สามารถเพิ่มหรือลบตัวจัดการเหตุการณ์ได้โดยใช้สคริปต์ เช่นเดียวกับแบบจำลองอินไลน์ แต่ละเหตุการณ์สามารถลงทะเบียนตัวจัดการเหตุการณ์ได้เพียงตัวเดียวเท่านั้น จะเพิ่มเหตุการณ์โดยการกำหนดชื่อตัวจัดการให้กับคุณสมบัติเหตุการณ์ของออบเจ็กต์องค์ประกอบ หากต้องการลบตัวจัดการเหตุการณ์ เพียงตั้งค่าคุณสมบัติเป็นค่าว่าง:
< ! doctype html> < html lang = " en" ><head> < meta charset = " utf - 8 " > <title>การจัดการเหตุการณ์แบบดั้งเดิม</title> </head><body> <h1> การจัดการเหตุการณ์แบบดั้งเดิม</h1><p> เฮ้โจ! </p><script> var triggerAlert = function () { window.alert ( " Hey Joe" ) ; } ; // กำหนดตัว จัดการเหตุการณ์document.onclick = triggerAlert ; // กำหนดตัวจัดการเหตุการณ์อีกตัวwindow.onload = triggerAlert ; // ลบตัวจัดการเหตุการณ์ที่เพิ่งกำหนดwindow.onload = null ; </script> </body> </html>วิธีการเพิ่มพารามิเตอร์:
var name = 'Joe' ; document.onclick = ( function ( name ) { return function ( ) { alert ( ' Hey ' + name + '!' ); }; }( name ));ฟังก์ชันภายในยังคงรักษาขอบเขตการทำงาน ของตน ไว้
DOM ระดับ 2
W3C ได้ออกแบบโมเดลการจัดการเหตุการณ์ที่มีความยืดหยุ่นมากขึ้นใน DOM ระดับ 2 [ 18 ]
| ชื่อ | คำอธิบาย | ประเภทอาร์กิวเมนต์ | ชื่ออาร์กิวเมนต์ |
|---|---|---|---|
| เพิ่มตัวฟังเหตุการณ์ | อนุญาตให้ลงทะเบียนผู้รับฟังเหตุการณ์บนเป้าหมายเหตุการณ์ได้ | ดอมสตริง | พิมพ์ |
| ผู้ฟังเหตุการณ์ | ผู้ฟัง | ||
| บูลีน | ใช้การจับภาพ | ||
| ลบตัวฟังเหตุการณ์ | อนุญาตให้ลบตัวรับฟังเหตุการณ์ออกจากเป้าหมายของเหตุการณ์ได้ | ดอมสตริง | พิมพ์ |
| ผู้ฟังเหตุการณ์ | ผู้ฟัง | ||
| บูลีน | ใช้การจับภาพ | ||
| เหตุการณ์การจัดส่ง | อนุญาตให้ส่งเหตุการณ์ไปยังผู้รับฟังเหตุการณ์ที่สมัครรับข้อมูลไว้ | เหตุการณ์ | อีวีที |
ข้อมูลที่เป็นประโยชน์บางประการ:
- เพื่อป้องกันไม่ให้เหตุการณ์แพร่กระจาย นักพัฒนาต้องเรียกใช้
stopPropagation()เมธอดของอ็อบเจ็กต์เหตุการณ์นั้น - เพื่อป้องกันไม่ให้มีการเรียกใช้งานการทำงานเริ่มต้นของเหตุการณ์ นักพัฒนาต้องเรียกใช้
preventDefault()เมธอดของอ็อบเจ็กต์เหตุการณ์นั้น
ความแตกต่างหลักจากโมเดลแบบดั้งเดิมคือ สามารถลงทะเบียนตัวจัดการเหตุการณ์หลายตัวสำหรับเหตุการณ์เดียวกันได้ นอกจากนี้ยังสามารถใช้ตัวเลือกนี้ เพื่อระบุว่าควรเรียกตัวจัดการในขั้น ตอน useCaptureการจับภาพแทนที่จะเป็นขั้นตอนการแพร่กระจาย โมเดลนี้ได้รับการสนับสนุนโดยMozilla , Opera , Safari , ChromeและKonqueror
เป็นการเขียนใหม่ของตัวอย่างที่ใช้ในแบบจำลองดั้งเดิม
< ! doctype html> < html lang = "en" ><head> < meta charset = " utf - 8 " > <title> DOM Level 2 </title> </head><body> <h1> DOMระดับ2 </h1><p> เฮ้โจ! </p><script> var heyJoe = function () { window.alert ( " Hey Joe!" ) ; } // เพิ่มตัวจัดการเหตุการณ์document.addEventListener ( "click" , heyJoe , true ) ; // ขั้นตอนการจับภาพ// เพิ่มตัวจัดการเหตุการณ์อีกตัวwindow.addEventListener ( " load" , heyJoe , false ) ; // ขั้นตอนการส่งต่อ เหตุการณ์ // ลบตัวจัดการเหตุการณ์ที่เพิ่งเพิ่มwindow.removeEventListener ( " load " , heyJoe , false ) ; </script></body> </html>แบบจำลองเฉพาะสำหรับ Internet Explorer
Microsoft Internet Explorer เวอร์ชันก่อน 8 ไม่ปฏิบัติตามแบบจำลองของ W3C เนื่องจากแบบจำลองของตนเองถูกสร้างขึ้นก่อนการให้สัตยาบันมาตรฐาน W3C Internet Explorer 9 ปฏิบัติตามเหตุการณ์ระดับ DOM 3 [ 22 ]และ Internet Explorer 11 ยกเลิกการสนับสนุนแบบจำลองเฉพาะของ Microsoft [ 23 ]
| ชื่อ | คำอธิบาย | ประเภทอาร์กิวเมนต์ | ชื่ออาร์กิวเมนต์ |
|---|---|---|---|
| แนบเหตุการณ์ | คล้ายกับเมธอด addEventListener ของ W3C | สตริง | กิจกรรม |
| ตัวชี้ | แจ้งเตือน | ||
| ถอดอีเวนต์ | คล้ายกับเมธอด removeEventListener ของ W3C | สตริง | กิจกรรม |
| ตัวชี้ | แจ้งเตือน | ||
| เหตุการณ์ไฟไหม้ | คล้ายกับเมธอด dispatchEvent ของ W3C | สตริง | กิจกรรม |
| เหตุการณ์ | oEventObject |
ข้อมูลที่เป็นประโยชน์บางประการ:
- เพื่อป้องกันไม่ให้เหตุการณ์แพร่กระจายออกไป นักพัฒนาต้องตั้งค่า
cancelBubbleคุณสมบัติ ของเหตุการณ์นั้น - เพื่อป้องกันไม่ให้มีการเรียกใช้งานการทำงานเริ่มต้นของเหตุการณ์ นักพัฒนาต้องตั้ง
returnValueค่าคุณสมบัติ ของเหตุการณ์นั้น - คำหลัก นี้
thisหมายถึงwindowอ็อบเจ็กต์ ส่วนกลาง
โมเดลนี้แตกต่างจากโมเดลแบบดั้งเดิมตรงที่สามารถลงทะเบียนตัวจัดการเหตุการณ์ได้หลายตัวสำหรับเหตุการณ์เดียวกัน อย่างไรก็ตามuseCaptureไม่สามารถใช้ตัวเลือกนี้เพื่อระบุว่าควรเรียกใช้ตัวจัดการในขั้นตอนการจับภาพได้ โมเดลนี้รองรับโดย Microsoft Internet Explorerและเบราว์เซอร์ที่ใช้ Trident (เช่นMaxthon , Avant Browser)
เป็นการเขียนใหม่ของตัวอย่างที่ใช้ในโมเดลเดิมที่เฉพาะเจาะจงสำหรับ Internet Explorer
< ! doctype html> < html lang = " en " > <head> < meta charset = " utf - 8" > <title> โมเดลเฉพาะสำหรับInternet Explorer </title> </head> <body> <h1> โมเดลเฉพาะสำหรับInternet Explorer </h1><p> เฮ้โจ! </p><script> var heyJoe = function () { window.alert ( " Hey Joe!" ) ; } // เพิ่มตัวจัดการเหตุการณ์document.attachEvent ( " onclick" , heyJoe ); // เพิ่มตัวจัดการเหตุการณ์อีกตัว window.attachEvent ( " onload" , heyJoe ); // ลบตัวจัดการเหตุการณ์ที่เพิ่งเพิ่มwindow.detachEvent ( " onload " , heyJoe ) ; </script></body> </html>อ่านเพิ่มเติม
- ไดเทล, ฮาร์วีย์. (2002). อินเทอร์เน็ตและเวิลด์ไวด์เว็บ: วิธีการเขียนโปรแกรม (ฉบับที่สอง). ISBN 0-13-030897-8
- องค์กร Mozilla (2009). เอกสารอ้างอิงเหตุการณ์ DOM . สืบค้นเมื่อ 25 สิงหาคม 2009.
- Quirksmode (2008). ตารางความเข้ากันได้ของเหตุการณ์ . สืบค้นเมื่อ 27 พฤศจิกายน 2008.
- http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone/
ลิงก์ภายนอก
- ข้อกำหนดเหตุการณ์ระดับ 2 ของ Document Object Model (DOM)
- ร่างเอกสารการทำงานของเหตุการณ์ระดับ 3 ของ Document Object Model (DOM)
- DOM4: กิจกรรม (ฉบับร่างบรรณาธิการ)
- ร่างเอกสารการทำงานของ UI Events
- Pointer Events ข้อเสนอแนะผู้สมัคร W3C
- MSDN PointerEvent
- domevents.dev - เครื่องมือแสดงภาพเพื่อเรียนรู้เกี่ยวกับ DOM Events ผ่านการสำรวจ
- ตัวอย่าง JS fiddle สำหรับการส่งต่อและดักจับเหตุการณ์ (Event Bubbling and Capturing)