คอมพิวเตอร์ Windows อินเทอร์เน็ต

เอกสารเหตุการณ์จาวาสคริปต์ JavaScript - ประเภทของเหตุการณ์ แนบเหตุการณ์กับองค์ประกอบที่ถูกต้อง

หัวข้อของเหตุการณ์มีความสำคัญและน่าสนใจมาก ต้องขอบคุณเธอ คุณสามารถทำสิ่งที่น่าสนใจมากมายที่ผู้ใช้จะต้องพึงพอใจ เหตุการณ์ JavaScriptเป็นการกระทำเฉพาะที่ทริกเกอร์โดยผู้ใช้หรือเบราว์เซอร์ ตัวอย่างเช่น เหตุการณ์อาจเป็นการคลิกเมาส์บนปุ่ม การเลื่อนเมาส์ การโฟกัสที่องค์ประกอบ การเปลี่ยนค่าในช่องข้อความบางช่อง การเปลี่ยนขนาดของหน้าต่างเบราว์เซอร์ และอื่นๆ

ฉันได้เตรียมโต๊ะที่มีเหตุการณ์ทั้งหมด (ซึ่งฉันรู้อย่างน้อย) ใน JavaScript... ในนั้นคุณจะพบ อย่างแรกคือ ชื่อของเหตุการณ์ องค์ประกอบที่สามารถสร้างเหตุการณ์นี้ และคำอธิบายของเหตุการณ์เอง เหตุการณ์ JavaScript.

เหตุการณ์ วัตถุ สาเหตุของการเกิด
ยกเลิกภาพขัดจังหวะการโหลดภาพ
เบลอการสูญเสียโฟกัสขององค์ประกอบ
เปลี่ยนFileUpload, Select, Text, Textareaการเปลี่ยนแปลงของมูลค่า
คลิกพื้นที่, ปุ่ม, ช่องทำเครื่องหมาย, เอกสาร, ลิงก์, วิทยุ, รีเซ็ต, ส่งคลิกเมาส์ที่องค์ประกอบ
DblClickพื้นที่, เอกสาร, ลิงค์ดับเบิลคลิกที่องค์ประกอบ
DragDropหน้าต่างย้ายไปที่หน้าต่างเบราว์เซอร์
จุดสนใจปุ่ม, ช่องทำเครื่องหมาย, FileUpload, เฟรม, เลเยอร์, ​​รหัสผ่าน, วิทยุ, รีเซ็ต, เลือก, ส่ง, ข้อความ, Textarea, หน้าต่างการตั้งค่าโฟกัสที่องค์ประกอบ
คีย์ดาวน์กดปุ่มบนแป้นพิมพ์
กดปุ่มเอกสาร รูปภาพ ลิงก์ Textareaถือแป้นบนแป้นพิมพ์
คีย์อัพเอกสาร รูปภาพ ลิงก์ Textareaปล่อยแป้นบนแป้นพิมพ์
โหลดเอกสาร รูปภาพ เลเยอร์ หน้าต่าง
เมาส์ลงปุ่ม เอกสาร ลิงค์กดปุ่มเมาส์
MouseMoveหน้าต่างเมาส์ในการเคลื่อนไหว
MouseOutพื้นที่ เลเยอร์ ลิงค์เมาส์อยู่นอกขอบเขตขององค์ประกอบ
เมาส์โอเวอร์พื้นที่ เลเยอร์ ลิงค์เมาส์อยู่เหนือองค์ประกอบ
MouseUpปุ่ม เอกสาร ลิงค์ปล่อยปุ่มเมาส์
เคลื่อนไหวกรอบขนย้ายสิ่งของ
รีเซ็ตรูปร่างการรีเซ็ตแบบฟอร์ม
ปรับขนาดกรอบหน้าต่างการปรับขนาด
เลือกข้อความ Textareaการเลือกข้อความ
ส่งรูปร่างการถ่ายโอนข้อมูล
ยกเลิกการโหลดหน้าต่างกำลังยกเลิกการโหลดหน้าปัจจุบัน

ทีนี้มาดูวิธีการกัน ใช้เหตุการณ์ใน JavaScript... มีสิ่งที่เรียกว่า ตัวจัดการเหตุการณ์. ตัวจัดการเหตุการณ์เพียงแค่กำหนดว่าจะเกิดอะไรขึ้นเมื่อเกิดเหตุการณ์บางอย่างขึ้น ตัวจัดการเหตุการณ์ JavaScriptมีรูปแบบทั่วไปดังนี้

OnNameEvents

นั่นคือคำนำหน้ามาก่อน " บน"แล้วจะเป็นอย่างไรต่อไป ชื่องาน, เช่น, เช่น ตัวจัดการเหตุการณ์: onFocus, เมื่อคลิก, onSubmitฯลฯ ฉันคิดว่าไม่มีคำถามที่นี่ และตอนนี้คำถามหลัก: " ฉันจะใช้เหตุการณ์ใน JavaScript ได้อย่างไร" พื้นที่ของแอปพลิเคชันมีขนาดใหญ่และตอนนี้เราจะพิจารณาปัญหาหนึ่งกับคุณ หน้ามีสามลิงก์ แต่ละลิงก์รับผิดชอบสีพื้นหลังที่แตกต่างกัน (เช่น สีขาว สีเหลือง และสีเขียว) เริ่มแรก พื้นหลังเป็นสีขาว เมื่อคุณวางเมาส์เหนือลิงก์ใดลิงก์หนึ่ง สีของพื้นหลังจะเปลี่ยนไป เมื่อวางเมาส์ไว้ สีพื้นหลังจะกลับไปเป็นค่าเริ่มต้น เมื่อคลิกเมาส์ที่ลิงก์ สีพื้นหลังจะคงไว้เป็น ค่าเริ่มต้น







สีขาว
สีเหลือง
เขียว

มาจัดการกับสคริปต์นี้กันดีกว่า หน้า HTMLด้วยการสนับสนุน JavaScriptและ CSS(กล่าวอีกนัยหนึ่งนี่คือตัวอย่าง DHTML). คนธรรมดามาก่อน แท็ก HTMLโดยที่ใด ๆ เริ่มต้นขึ้น หน้า HTML... ต่อไป เราสร้างสไตล์ที่ต้องการให้ลิงก์ทั้งหมดในหน้านี้เป็นสีน้ำเงิน ขีดเส้นใต้ และตัวชี้เมาส์ที่อยู่บนนั้นอยู่ในรูปของ "ตัวชี้" คุณอาจพูดว่า "ทำไมคุณต้องกำหนดสไตล์ด้วย ท้ายที่สุดแล้ว ลิงก์จะเหมือนกันทุกประการ" ใช่แล้ว ลิงก์ แต่เราไม่มีลิงก์เช่นนี้ (เพราะไม่มีแอตทริบิวต์ hrefในแท็ก) ดังนั้นข้อความเหล่านั้นจะเป็นข้อความสีดำล้วนตามค่าเริ่มต้น (แม้ว่าคุณจะคลิกบนข้อความได้เช่นกัน) ดังนั้นสไตล์จึงเป็นสิ่งจำเป็น คุณสามารถลบออกและดูว่าเกิดอะไรขึ้น ยังดีกว่าใส่ href แอตทริบิวต์(ค่าใดก็ได้ แม้จะว่างเปล่า) และอธิบายว่าเหตุใดสคริปต์จึงหยุดทำงาน ต่อไปมันเริ่มต้นขึ้นแล้ว JavaScript... เราสร้างตัวแปร default_colorซึ่งรับผิดชอบสีเริ่มต้น แล้วมีสามฟังก์ชั่น:

การทำงาน setTempColor ()รับผิดชอบในการเปลี่ยนสีชั่วคราว

การทำงาน setDefaultColor ()รับผิดชอบในการเปลี่ยนสีเริ่มต้น

การทำงาน ค่าเริ่มต้นสี ()กำหนดสีพื้นหลังเริ่มต้น

จากนั้นจะมีลิงก์พร้อมแอตทริบิวต์ในรูปแบบ ตัวจัดการเหตุการณ์... เมื่อคุณวางเมาส์เหนือลิงก์ เหตุการณ์ MouseOverตามลำดับ ตัวจัดการเหตุการณ์ onMouseOverเรียกฟังก์ชัน setTempColor ()และส่งผ่านพารามิเตอร์ที่เกี่ยวข้อง เมื่อคุณเอาเมาส์ออกจากองค์ประกอบ กิจกรรม MouseOutแล้วเรียก defaultColor () ฟังก์ชั่นซึ่งทำให้สีพื้นหลังเป็นค่าเริ่มต้น และสุดท้ายเมื่อคุณคลิกที่ลิงค์ ( ตัวจัดการ onClick) ฟังก์ชันนี้เรียกว่า setDefaultColor ()ซึ่งตั้งค่าสีที่ระบุในพารามิเตอร์เป็นสีพื้นหลังเริ่มต้น อย่างที่คุณเห็นทุกอย่างค่อนข้างง่าย

มันเป็น หลักการใช้เหตุการณ์ใน JavaScriptแล้วทุกอย่างขึ้นอยู่กับจินตนาการของคุณเท่านั้น!

ความสามารถของ JavaScript ในการสร้างหน้า HTML แบบไดนามิกนั้นขึ้นอยู่กับสามเสาหลัก สองคนนี้ได้รับการกล่าวถึงในบทความก่อนหน้านี้แล้ว และที่สามคือเหตุการณ์

  • การจัดการหน้าต่างเบราว์เซอร์ - การใช้วัตถุหน้าต่าง
  • การจัดการวัตถุภายในหน้าต่างคือ DOM
  • รันโค้ดจาวาสคริปต์ในเหตุการณ์

เหตุการณ์- ปฏิกิริยาของคอมพิวเตอร์ต่อการกระทำของผู้ใช้ ตัวอย่างเช่นกับ T. เหตุการณ์จาวาสคริปต์ถือเป็นการกดปุ่มแป้นพิมพ์ การเลื่อนเมาส์และการคลิก และการปิดหน้าต่างเบราว์เซอร์ เหตุการณ์ทั้งหมดที่มีต. javaScript ถูกสร้างขึ้นโดยวัตถุเอกสารและเบราว์เซอร์ (ไม่มีแนวคิดของ 'ผู้ใช้') ตัวอย่างเช่น เมื่อคุณคลิกที่ย่อหน้า เหตุการณ์การคลิกเมาส์จะถูกสร้างขึ้นโดยวัตถุ - ย่อหน้า

เพื่อให้สามารถรันโค้ดจาวาสคริปต์บางตัวที่ตอบสนองต่อเหตุการณ์ได้ คุณต้องเชื่อมโยงโค้ดนี้กับเหตุการณ์ที่สร้างขึ้นจากอ็อบเจกต์เฉพาะ กล่าวคือ ด้วยเหตุการณ์เฉพาะจากวัตถุเฉพาะ การกระทำนี้เรียกว่า - การสมัครสมาชิกเหตุการณ์

การสมัครสมาชิกหมายความว่าเราผูกฟังก์ชันกับเหตุการณ์เฉพาะจากวัตถุเฉพาะในรูปแบบวัตถุของเบราว์เซอร์ และเมื่อวัตถุนี้สร้าง (สร้าง) เหตุการณ์นี้ ฟังก์ชันนี้จะเริ่มทำงานโดยอัตโนมัติ

  • onclick - คลิกปุ่มเมาส์
  • ondblclick - ดับเบิลคลิกที่ปุ่มเมาส์
  • onmousedown - กดปุ่มเมาส์ (ลง)
  • onmousemove - เลื่อนเมาส์เหนือวัตถุ (มีหลายเหตุการณ์เกิดขึ้น การเคลื่อนไหวของเมาส์ 1px = 1 เหตุการณ์)
  • onmouseout - เมาส์ออกจากวัตถุ
  • onmouseover - เลื่อนเมาส์เหนือวัตถุที่ต้องการ
  • onmouseup - ปล่อยปุ่มเมาส์ (ยกขึ้น)
  • onkeydown - กดปุ่มคีย์บอร์ด (ลง)
  • onkeypress - กดปุ่มคีย์บอร์ด
  • onkeyup - ปล่อยปุ่มแป้นพิมพ์ (ยกขึ้น)
  • onblur - สูญเสียโฟกัสอินพุต (เคอร์เซอร์กะพริบ)
  • onfocus - ช่วงเวลาที่องค์ประกอบนี้ได้รับการโฟกัสอินพุต
  • onchange - สร้างโดยตัวควบคุมหลังจากสูญเสียโฟกัส ถ้าข้อความมีการเปลี่ยนแปลง (เช่น ในกล่องข้อความ) ข้อยกเว้นคือรายการ 'เลือก' ซึ่งเหตุการณ์นี้จะถูกสร้างขึ้นทันที ไม่ใช่หลังจากสูญเสียโฟกัส
  • onload - สร้างขึ้นเมื่อหน้าโหลดเสร็จในหน้าต่าง มักใช้เมื่อคุณต้องการเรียกใช้โค้ดจาวาสคริปต์หลังจากที่โหลดหน้าเว็บจนเต็มแล้ว
  • onunload - เกิดขึ้นก่อนยกเลิกการโหลดเอกสารจากหน้าต่าง (เช่น เมื่อเราปิดเอกสารนี้หรือเปลี่ยนไปใช้เอกสารอื่น)
  • onreset - แบบฟอร์มถูกรีเซ็ต
  • onsubmit - ส่งแบบฟอร์มข้อมูลแล้ว

สมัครสมาชิกกิจกรรม

  • สมัครสมาชิกผ่านจาวาสคริปต์ วิธีนี้ใช้ในกรณีส่วนใหญ่ อันดับแรก เราต้องค้นหาออบเจ็กต์ขององค์ประกอบที่เราต้องการสมัครรับข้อมูลเหตุการณ์ เช่น ผ่านเมธอด getElementById (ระบุ id ขององค์ประกอบที่ต้องการ)
ฟังก์ชั่น myFunc () ( // สร้างฟังก์ชันอย่างง่ายเตือน ("สวัสดี"); ) ฟังก์ชัน pageInit () (var p = เอกสาร getElementById ("1"); p. onclick = myFunc;) // เรียกฟังก์ชันเพื่อเรียกเหตุการณ์หน้าต่าง. onload = pageInit; // เหตุการณ์จะเริ่มขึ้นเมื่อโหลดเพจ < p id= 1 >วรรค 1 // กำหนดรหัสสำหรับย่อหน้า
  • สมัครสมาชิกผ่านโค้ด html ข้อเสียของวิธีนี้คือทำให้โค้ด html รกด้วยโค้ดจาวาสคริปต์ นอกจากนี้ยังมีข้อจำกัดหลายประการ และในกรณีที่ซับซ้อน จะไม่สะดวกในการใช้งาน
< script type= "text/javascript" >ฟังก์ชั่น myFunc () ( // สร้างฟังก์ชันอย่างง่ายเตือน ("สวัสดี"); ) < p onclick= "myFunc()" >วรรค 2 // เรียกฟังก์ชัน

รูปแบบการจัดการเหตุการณ์

เมื่อมีเหตุการณ์เกิดขึ้นกับองค์ประกอบใดๆ เหตุการณ์ที่คล้ายกันควรเกิดขึ้นกับองค์ประกอบหลักทั้งหมดจนถึงด้านบนสุดของหน้า (ไม่เกิน 'เนื้อหา' เนื่องจากเป็นพื้นที่หลักของเอกสาร) ดังนั้น เหตุการณ์ใด ๆ ที่เกิดขึ้นบนหน้าจะเริ่มต้นขึ้นในร่างกาย

แล้วคำถามก็เกิดขึ้น เหตุการณ์ดังกล่าวจะเกิดขึ้นในลำดับใด? ในเบราว์เซอร์สมัยใหม่ รูปแบบการจัดการเหตุการณ์เรียกว่าโมเดลฟองสบู่ สาระสำคัญ: ประการแรก เหตุการณ์เกิดขึ้นสำหรับองค์ประกอบที่ถูกคลิก จากนั้นสำหรับองค์ประกอบหลัก และอื่นๆ จนถึงด้านบนสุด - ถึง 'เนื้อหา'

องค์ประกอบ -> องค์ประกอบ 2 -> เอกสาร -> window

พารามิเตอร์เหตุการณ์ (อ็อบเจ็กต์เหตุการณ์)

มีวัตถุดังกล่าว เหตุการณ์ซึ่งมีคุณสมบัติมากมาย โดยการอ่านคุณสมบัติเหล่านี้ คุณจะได้รับข้อมูลเกี่ยวกับเหตุการณ์ ในการรับข้อมูล คุณต้องรับวัตถุนั้นก่อน

หลัก คุณสมบัติของวัตถุนี้:

  • x, y - พิกัดของเมาส์ในเวลาที่เกิดเหตุการณ์
  • clientX, clientY เหมือนกัน
  • offsetX, offsetY - เหมือนกัน แต่นี่คือออฟเซ็ตของเมาส์ที่สัมพันธ์กับองค์ประกอบหลัก
  • screenX, screenY - พิกัดหน้าจอ
  • ปุ่ม - กดปุ่มใดของเมาส์ (0 - ไม่ได้กด 1 - กดปุ่มซ้าย 2 - กดปุ่มขวา 4 - กดปุ่มกลาง)
  • keyCode รหัสตัวเลขของแป้นคีย์บอร์ดที่กด
  • srcElement - องค์ประกอบที่ยกเหตุการณ์
  • fromElement - องค์ประกอบที่เลื่อนเมาส์ออก
  • toElement - สิ่งบ่งชี้ของวัตถุที่เมาส์วิ่งทับ
  • cancelBubble - วิธีที่ไม่ได้มาตรฐาน หากคุณให้ค่าเป็น จริง 'ฟองป๊อปอัป' จะถูกยกเลิก หรือเปลี่ยนรหัสคีย์ที่ผู้ใช้กดได้

จากผู้เขียน:หลังจากที่โหลดหน้าเว็บและพร้อมใช้งานแล้ว เหตุการณ์ทั้งหมดจะถูกทริกเกอร์ใน JavaScript ซึ่งจะใหญ่ขึ้นเมื่อผู้ใช้เริ่มโต้ตอบกับหน้าเว็บไม่ทางใดก็ทางหนึ่ง กิจกรรมรวมถึงการโหลดหน้า เลื่อนลง คลิกปุ่ม หรือแม้แต่กรอกแบบฟอร์ม ในการทริกเกอร์เหตุการณ์ใน JavaScript คุณต้องมีโค้ดพิเศษที่คุณออกแบบและเขียนด้วยตัวเอง ดังนั้นจึงสร้างการโต้ตอบที่ลึกซึ้งยิ่งขึ้น

เหตุการณ์ใน JS สามารถแบ่งออกเป็น 4 กลุ่มใหญ่:

เหตุการณ์ UI: เริ่มทำงานเมื่อผู้ใช้โต้ตอบกับ UI ของเบราว์เซอร์ (ปุ่มรอบๆ หน้าเว็บที่เป็นส่วนหนึ่งของอินเทอร์เฟซของเบราว์เซอร์) เหตุการณ์เหล่านี้ยังสามารถรวมการกระทำที่เพจดำเนินการโดยไม่ขึ้นกับผู้ใช้ เหตุการณ์เหล่านี้รวมถึงการปรับขนาดหน้าต่าง การเลื่อนหน้า และการโหลดและยกเลิกการโหลดเนื้อหา

เหตุการณ์แป้นพิมพ์ เมาส์ และหน้าจอสัมผัส: เริ่มทำงานเมื่อผู้ใช้กดหรือปล่อยปุ่มบนแป้นพิมพ์ ควบคุมเมาส์ แทร็กแพด หรือใช้หน้าจอสัมผัส

โฟกัสและเหตุการณ์สำหรับผู้พิการ ส่วนใหญ่เกี่ยวข้องกับแบบฟอร์ม: ฟิลด์ป้อนข้อมูล "รับโฟกัส" เมื่อผู้ใช้พร้อมที่จะโต้ตอบกับมัน เหตุการณ์อื่นๆ ติดตามการส่งแบบฟอร์ม การเปลี่ยนแปลงค่าฟิลด์ของฟอร์ม และอื่นๆ

จาวาสคริปต์ เริ่มต้นอย่างรวดเร็ว

เหตุการณ์การกลายพันธุ์และผู้สังเกตการณ์ องค์ประกอบการกลายพันธุ์จะถูกติดตามเมื่อโครงสร้าง DOM เปลี่ยนแปลง เช่น เมื่อสคริปต์แทรกหรือลบองค์ประกอบในหน้า

ผูกตัวจัดการเหตุการณ์

โค้ดที่กำหนดเองที่จะเริ่มทำงานสำหรับองค์ประกอบ DOM เฉพาะจะสร้างตัวจัดการเหตุการณ์ มีสามวิธีใน JS ในการสร้างตัวจัดการเหตุการณ์:

1. ตัวจัดการเหตุการณ์ HTML มาตรฐานผ่านแอตทริบิวต์

วิธีการผูกเหตุการณ์ที่เก่าแก่ที่สุด วิธีหนึ่งที่ใช้กันมากที่สุดจนถึงตอนนี้ วิธีนี้ใช้คุณลักษณะพิเศษในมาร์กอัป ตัวอย่างเช่น:

< input type = "text" id = "username" onblur = "checkName()" >

ในตัวอย่างข้างต้น หลังจากที่ฟิลด์ได้รับการโฟกัสและผู้ใช้ดำเนินการกรอกข้อมูลในฟิลด์ถัดไป (เช่น การใช้ TAB หรือการคลิกปกติ) องค์ประกอบจะเรียกใช้ฟังก์ชัน checkName ซึ่งเขียนด้วย JS
ไม่แนะนำให้ใช้ตัวจัดการเหตุการณ์ HTML มาตรฐานในการพัฒนาสมัยใหม่ สาเหตุหลักมาจากความจริงที่ว่าฟังก์ชันการทำงานผสมกับมาร์กอัป ซึ่งทำให้ยากต่อการทำงานและดีบักโค้ด

2. ตัวจัดการเหตุการณ์มาตรฐานใน DOM

เทคนิคนี้แยก JS และมาร์กอัป แต่มีข้อจำกัดเหมือนกัน - สามารถกำหนดฟังก์ชันให้กับเหตุการณ์ได้เพียงฟังก์ชันเดียวเท่านั้น HTML ที่เทียบเท่ากับตัวจัดการเหตุการณ์ใน DOM จะเป็น:

var username = document.getElementbyId ("ชื่อผู้ใช้"); username.onblur = ตรวจสอบชื่อ;

ชื่อผู้ใช้. onblur = ตรวจสอบชื่อ;

จาวาสคริปต์ เริ่มต้นอย่างรวดเร็ว

เรียนรู้พื้นฐานของ JavaScript ด้วยตัวอย่างจริงของการสร้างเว็บแอปพลิเคชัน

ในตัวอย่างก่อนหน้านี้ ฟังก์ชัน checkName จะทำงานหลังจากองค์ประกอบแบบฟอร์มสูญเสียโฟกัส

3. ผู้ฟังเหตุการณ์

วิธีการที่ทันสมัยในการเพิ่มตัวจัดการเหตุการณ์ ช่วยให้คุณสามารถเชื่อมโยงเหตุการณ์และฟังก์ชันต่างๆ ได้:

var username = document.getElementbyId ("ชื่อผู้ใช้"); username.addEventListener ("เบลอ", ตรวจสอบชื่อ, เท็จ);

var username = เอกสาร getElementbyId ("ชื่อผู้ใช้");

ชื่อผู้ใช้. addEventListener ("เบลอ", ตรวจสอบชื่อ, เท็จ);

ค่าบูลีนที่ส่วนท้ายระบุว่าจะบันทึกเหตุการณ์หรือไม่ มักจะตั้งค่าเป็นเท็จ ในสคริปต์อย่างง่าย เหตุการณ์มักจะเขียนเป็นฟังก์ชันที่ไม่ระบุชื่อ:

var username = document.getElementbyId ("ชื่อผู้ใช้"); username.addEventListener ("เบลอ", ฟังก์ชัน () (// การดำเนินการเพื่อทริกเกอร์เหตุการณ์))

เหตุการณ์ทั้งหมดไม่เท่ากัน

สิ่งสำคัญคือต้องเข้าใจว่าไม่ใช่ทุกเหตุการณ์ที่สามารถจัดการได้ในลักษณะเดียวกัน เหตุการณ์การเลื่อนและปรับขนาดมักเกิดขึ้นบ่อยมาก คุณจึงต้องระวังให้มาก เพื่อไม่ให้ประสิทธิภาพของสคริปต์ทำงานช้าลง เช่นเดียวกับเหตุการณ์อินพุตที่ดูเหมือนไม่เป็นอันตราย ประสิทธิภาพของสคริปต์อาจลดลงอย่างมากหากพยายามตอบสนองต่อเหตุการณ์อินพุตที่เรียกบ่อยบนแถบเลื่อนช่วงอย่างต่อเนื่อง

ไม่ได้ติดตามกิจกรรมทั้งหมด

ขณะนี้ผู้ดูการกลายพันธุ์ไม่สามารถติดตามการเปลี่ยนแปลงทั้งหมดกับองค์ประกอบทั้งหมดบนหน้าได้ ตัวอย่างเช่น ไม่มีวิธีติดตามการเปลี่ยนแปลงความสูงขององค์ประกอบ (เมื่อคอนเทนเนอร์ย่อลงในการออกแบบที่ตอบสนอง ข้อความภายในจะจัดเรียงใหม่ และองค์ประกอบจะยาวขึ้น) ยังมีวิธีติดตามการเปลี่ยนแปลง ฉันจะพูดถึงเรื่องนี้ในบทความหน้า

แนบเหตุการณ์กับองค์ประกอบที่ถูกต้อง

เหตุการณ์ onclick นำไปใช้กับองค์ประกอบหลายอย่าง รวมถึงลิงก์ มีกฎทั่วไป - ไม่แนะนำให้แนบโค้ด JS กับลิงก์ เมื่อคลิกลิงก์ ผู้ใช้ควรไปที่ส่วนอื่นของไซต์หรือไปยังจุดยึด หากคุณต้องการองค์ประกอบ UI ที่สามารถใช้เปลี่ยนแปลงบางอย่างในหน้าเดียวกัน ปุ่มจะเหมาะกับคุณ คุณสามารถวาง JavaScript บนปุ่มได้โดยไม่มีปัญหาใดๆ

อย่าใช้ JavaScript หากคุณสามารถทำได้ด้วย CSS

เมื่อเทียบกับ CSS แล้ว JavaScript นั้นช้าและไม่น่าเชื่อถือ โดยทั่วไป ควรใช้ CSS เป็นทางเลือกแทนการเขียนสคริปต์ที่ซับซ้อนในทุกที่ที่ทำได้ อย่างไรก็ตาม CSS ไม่ได้ทำทุกอย่าง ใช้ได้ดีกับ: โฮเวอร์ (แทนที่เหตุการณ์การสัมผัสในหลายกรณี) และยังสามารถแทนที่เหตุการณ์การคลิกด้วย: เป้าหมายในบางกรณี ภาพเคลื่อนไหว CSS จะถูกทริกเกอร์โดยอัตโนมัติหลังจากโหลดหน้าเว็บ และมีสถานะ CSS พิเศษที่สามารถทริกเกอร์สำหรับองค์ประกอบต่างๆ เช่น ปุ่มตัวเลือก อย่างไรก็ตาม สิ่งที่ซับซ้อนกว่านั้นมักจะดีที่สุดสำหรับ JavaScript

ขณะทำงานกับเพจ ผู้ใช้ดำเนินการต่างๆ: คลิกปุ่มเมาส์ ป้อนข้อความบนแป้นพิมพ์ แต่ละการกระทำดังกล่าวเป็นเหตุการณ์ของเบราว์เซอร์ สามารถตรวจสอบและดำเนินการตามบางบรรทัดของโปรแกรมได้เมื่อเกิดขึ้น JavaScript มีตัวจัดการเหตุการณ์สำหรับสิ่งนี้ นอกจากการกระทำของผู้ใช้แล้ว ยังมีกิจกรรมอื่นๆ ของเบราว์เซอร์ เช่น การโหลดแบบเต็มหน้า

แต่ละเหตุการณ์มีชื่อของตัวเอง คลิกคือการกดปุ่มซ้ายของเมาส์ คีย์ลงคือการกดปุ่ม โฟกัสคือโฟกัสขององค์ประกอบของฟอร์ม

การจัดการเหตุการณ์

ฟังก์ชันที่ดำเนินการเมื่อมีการทริกเกอร์เหตุการณ์เรียกว่า จัดการเหตุการณ์... เหตุการณ์แต่ละประเภทมีตัวจัดการของตัวเอง ชื่อตัวจัดการประกอบด้วยคำบนและชื่อของเหตุการณ์ ตัวอย่างเช่น ตัวจัดการเหตุการณ์การคลิกเรียกว่า onclick เหตุการณ์ไม่ได้เกิดขึ้นบนหน้าโดยทั่วไป แต่เกิดขึ้นในองค์ประกอบเฉพาะ ดังนั้น ตัวจัดการจึงไม่ใช่ฟังก์ชันที่แยกจากกัน ตัวจัดการวางอยู่บนองค์ประกอบบางอย่างของหน้า

มีหลายวิธีในการกำหนดตัวจัดการเหตุการณ์ให้กับองค์ประกอบ คุณสามารถกำหนดตัวจัดการผ่านแอตทริบิวต์แท็ก รหัสที่จะดำเนินการเมื่อมีการทริกเกอร์เหตุการณ์จะถูกเขียนในค่าแอตทริบิวต์ มาสร้างเพจ เพิ่มปุ่มและกำหนดตัวจัดการเหตุการณ์การคลิกให้กับมัน:

1
2
3
4
5
6
7

หน้าหนังสือ

จาวาสคริปต์:

จาวาสคริปต์:

17
18
19
20
21
22

var inform = function () (การแจ้งเตือน ("ปุ่มอื่น");); var mbutton = document.getElementById ("mbutton"); mbutton.onclick = แจ้ง;

เมื่อกำหนดฟังก์ชันให้กับตัวจัดการ จะไม่มีวงเล็บหลังชื่อฟังก์ชัน หากคุณใส่วงเล็บ วงเล็บจะไม่ใช่การกำหนดฟังก์ชัน แต่เป็นการเรียกใช้งาน

มีเมธอด addEventListener () ที่กำหนดตัวจัดการเหตุการณ์ให้กับองค์ประกอบด้วย ก็ถือว่าทันสมัยกว่า ขณะนี้ไม่ได้ใช้บ่อยนัก แต่มีเหตุการณ์ใหม่ใน JavaScript ที่สามารถจัดการได้โดยใช้วิธีนี้เท่านั้น

element.addEventListener (เหตุการณ์ ฟังก์ชัน)

ตัวเลือก:

เหตุการณ์ - เหตุการณ์ที่ต้องดำเนินการ

ฟังก์ชั่น - ฟังก์ชั่นที่กลายเป็นตัวจัดการ

ในพารามิเตอร์ของวิธีนี้ ชื่อของเหตุการณ์จะถูกเขียนด้วยเครื่องหมายคำพูด และคุณไม่จำเป็นต้องเขียนคำก่อนหน้านั้น

รหัส HTML:

จาวาสคริปต์:

24
25
26
27
28
29

var newinform = ฟังก์ชั่น () (การแจ้งเตือน ("กดปุ่มใหม่");); var newbutton = document.getElementById ("ปุ่มใหม่"); newbutton.addEventListener ("คลิก", ​​แจ้งใหม่);

เมธอด removeEventListener () อนุญาตให้คุณลบตัวจัดการ

element.removeEventListener (เหตุการณ์ ฟังก์ชัน)

การใช้วิธีการที่พิจารณา องค์ประกอบสามารถกำหนดตัวจัดการได้หลายตัวสำหรับเหตุการณ์เดียวกัน จากนั้นคุณต้องลบแต่ละรายการแยกกัน

วัตถุเหตุการณ์

ทุกครั้งที่มีการทริกเกอร์เหตุการณ์ วัตถุเหตุการณ์จะถูกสร้างขึ้น วัตถุมีข้อมูลเกี่ยวกับเหตุการณ์ เหตุการณ์ประเภทต่างๆ มีวัตถุที่แตกต่างกัน แต่ยังมีคุณสมบัติที่วัตถุใด ๆ มี ตัวอย่างเช่น คุณสมบัติ type มีประเภทของเหตุการณ์

วัตถุเหตุการณ์ถูกส่งผ่านเป็นพารามิเตอร์ไปยังฟังก์ชันที่เป็นตัวจัดการ ในการเข้าถึงวัตถุ คุณต้องสร้างพารามิเตอร์ในฟังก์ชัน พารามิเตอร์นี้ใช้เพื่ออ้างถึงวัตถุ หากฟังก์ชันต้องการพารามิเตอร์อื่นด้วย วัตถุเหตุการณ์จะต้องเป็นพารามิเตอร์แรก มาเปลี่ยนตัวจัดการสำหรับปุ่มที่มี id เท่ากับ "ปุ่ม" มาเข้าถึงวัตถุเหตุการณ์กันเถอะ แทนที่จะแสดงข้อความเกี่ยวกับการกดปุ่ม เราจะแสดงประเภทของเหตุการณ์ ตอนนี้ตัวจัดการจะมีลักษณะดังนี้:

13
14
15
16

button.onclick = ฟังก์ชัน (เหตุการณ์) (การแจ้งเตือน (event.type););

คลิกที่ปุ่ม ประเภทของเหตุการณ์ที่เรียกจะปรากฏขึ้น

ออบเจ็กต์เหตุการณ์ทั้งหมดมีคุณสมบัติ currentTarget ส่งคืนองค์ประกอบที่เรียกเหตุการณ์ นี้อาจดูเหมือนไม่มีจุดหมาย ท้ายที่สุด ตัวจัดการถูกกำหนดให้กับองค์ประกอบเฉพาะ เหตุใดจึงส่งคืนองค์ประกอบนี้อีกครั้ง แต่ด้วยเหตุการณ์ของเบราว์เซอร์ สิ่งต่างๆ ก็ซับซ้อนขึ้นเล็กน้อย คุณจะได้เรียนรู้วิธีใช้งานในภายหลัง เราจะพิจารณาคุณสมบัติอื่น ๆ เมื่อศึกษาเหตุการณ์เฉพาะ

ประเภทงาน

ในช่วงเริ่มต้นของการพัฒนาเวิลด์ไวด์เว็บ นักพัฒนาเว็บต้องจัดการกับเหตุการณ์เพียงเล็กน้อยเท่านั้น: "โหลด", "คลิก", ​​"เมาส์โอเวอร์" และอื่นๆ ประเภทเหตุการณ์ที่ค่อนข้างเก่าเหล่านี้ได้รับการสนับสนุนอย่างดีจากเบราว์เซอร์ทั้งหมด เมื่อแพลตฟอร์มเว็บพัฒนาขึ้น จะมีการรวม API ที่ทรงพลังยิ่งขึ้น และจำนวนเหตุการณ์ก็เพิ่มขึ้นอย่างมาก ไม่มีมาตรฐานใดที่กำหนดชุดเหตุการณ์ที่สมบูรณ์ และจำนวนเหตุการณ์ที่รองรับยังคงเพิ่มขึ้นอย่างรวดเร็ว เหตุการณ์ใหม่เหล่านี้ถูกระบุในสองแหล่งต่อไปนี้:

    ข้อมูลจำเพาะของเหตุการณ์ระดับ 3 ของ DOM ซึ่งหลังจากหยุดนิ่งมานานหลายปี เริ่มมีการพัฒนาอย่างแข็งขันภายใต้การอุปถัมภ์ของกลุ่ม W3C

    API ใหม่จำนวนมากในข้อกำหนด HTML5 (และข้อกำหนดเพิ่มเติมที่เกี่ยวข้อง) กำหนดเหตุการณ์ใหม่ที่ใช้ ตัวอย่างเช่น เพื่อจัดการประวัติ การลากแล้วปล่อย แลกเปลี่ยนข้อความระหว่างเอกสาร และเล่นเสียงและวิดีโอ

โปรดทราบว่าประเภทเหตุการณ์ใหม่เหล่านี้ยังไม่ได้รับการสนับสนุนอย่างกว้างขวางและถูกกำหนดโดยมาตรฐานที่ยังคงอยู่ในขั้นตอนการออกแบบ เหตุการณ์ที่คุณมักจะใช้ในเว็บแอปพลิเคชันของคุณมักจะจัดอยู่ในหมวดหมู่ที่มีมาช้านานและรองรับโดยเบราว์เซอร์ทั้งหมด: เป็นกิจกรรมสำหรับการทำงานกับเมาส์ แป้นพิมพ์ แบบฟอร์ม HTML และวัตถุหน้าต่าง เราจะพิจารณาเหตุการณ์เหล่านี้

เหตุการณ์การโหลดเอกสาร

เว็บแอปพลิเคชันส่วนใหญ่ต้องการเว็บเบราว์เซอร์เพื่อแจ้งพวกเขาเมื่อเอกสารเสร็จสิ้นการโหลดและพร้อมที่จะดำเนินการกับมัน วัตถุประสงค์นี้ให้บริการโดยเหตุการณ์ โหลดในวัตถุหน้าต่าง เหตุการณ์การโหลดจะเพิ่มขึ้นหลังจากเอกสารและรูปภาพทั้งหมดถูกโหลดจนเต็มแล้วเท่านั้น อย่างไรก็ตาม สคริปต์สามารถเรียกใช้ได้ทันทีหลังจากที่แยกวิเคราะห์เอกสารแล้ว ก่อนที่จะโหลดรูปภาพ คุณสามารถลดเวลาเริ่มต้นของเว็บแอปพลิเคชันได้อย่างมากโดยเริ่มเขียนสคริปต์ในเหตุการณ์อื่นนอกเหนือจากการโหลด

เหตุการณ์ DOMContentLoadedเริ่มทำงานทันทีที่โหลดเอกสาร แยกวิเคราะห์โดย parser และดำเนินการสคริปต์ที่เลื่อนออกไปทั้งหมดแล้ว ณ จุดนี้ รูปภาพและสคริปต์ที่มีแอตทริบิวต์ async อาจยังคงโหลดต่อไป แต่ตัวเอกสารเองก็พร้อมที่จะดำเนินการ เหตุการณ์นี้เปิดตัวครั้งแรกใน Firefox และได้ถูกนำมาใช้โดยผู้ผลิตเบราว์เซอร์รายอื่นทั้งหมด รวมถึง Microsoft ซึ่งเพิ่มการสนับสนุนสำหรับเหตุการณ์นี้ใน IE9 แม้จะมีคำนำหน้า DOM ในชื่อ เหตุการณ์นี้ไม่ได้เป็นส่วนหนึ่งของมาตรฐานเหตุการณ์ DOM ระดับ 3 แต่เป็นมาตรฐานที่กำหนดโดยข้อกำหนด HTML5

ขณะที่โหลดเอกสาร ค่าของคุณสมบัติ document.readyState จะเปลี่ยนไป การเปลี่ยนแปลงค่าของคุณสมบัตินี้ใน IE แต่ละครั้งจะมาพร้อมกับเหตุการณ์ readystatechange บนอ็อบเจ็กต์ Document ดังนั้นใน IE เหตุการณ์นี้จึงสามารถใช้เพื่อกำหนดเมื่อสถานะสมบูรณ์เกิดขึ้น ข้อกำหนด HTML5 กำหนดมาตรฐานเหตุการณ์ พร้อมสถานะเปลี่ยนแต่สั่งให้เริ่มทำงานทันทีก่อนเหตุการณ์การโหลด ดังนั้นจึงไม่ชัดเจนนักว่าอะไรคือข้อดีของเหตุการณ์ readystatechange over load

ตัวอย่างด้านล่างกำหนดฟังก์ชัน whenReady () ฟังก์ชันที่ส่งผ่านไปยัง whenReady () ถูกเรียก (เป็นวิธีการของอ็อบเจ็กต์ Document) ทันทีที่เอกสารพร้อมที่จะดำเนินการ whenReady () รับฟังเหตุการณ์ DOMContentLoaded และ readystatechange และใช้เหตุการณ์การโหลดเป็นทางเลือกสำรองในกรณีที่ใช้ในเบราว์เซอร์รุ่นเก่าที่ไม่สนับสนุนสองเหตุการณ์แรก ฟังก์ชัน whenReady () จะใช้ในบางสถานการณ์ต่อไปนี้:

/ * ส่งฟังก์ชันของคุณไปที่ whenReady () และฟังก์ชันจะเรียกใช้ (เป็นวิธีการของวัตถุเอกสาร) ทันทีที่แยกวิเคราะห์เอกสารและพร้อมที่จะดำเนินการ ฟังก์ชันที่ลงทะเบียนจะถูกเรียกในเหตุการณ์ DOMContentLoaded, readystatechange หรือ load แรก เมื่อเอกสารพร้อมและเรียกฟังก์ชันทั้งหมดแล้ว whenReady () จะเรียกฟังก์ชันทั้งหมดที่ส่งผ่านไปยังเอกสารนั้นทันที * / var whenReady = (ฟังก์ชัน () (// ฟังก์ชันนี้ส่งคืนโดยฟังก์ชัน whenReady () var funcs =; // ฟังก์ชันที่จะเรียกใช้ในเหตุการณ์ var ready = false; // จะเป็นจริงเมื่อเรียกใช้ฟังก์ชันตัวจัดการ // ตัวจัดการเหตุการณ์ซึ่งถูกเรียกทันทีที่เอกสาร // พร้อมที่จะดำเนินการตัวจัดการฟังก์ชั่น (e) (// หากตัวจัดการถูกเรียกแล้วให้ส่งคืนการควบคุมหาก (พร้อม) กลับมา; // หากเหตุการณ์นี้ คือ readystatechange และ state คือ // ยอดเยี่ยมจาก "complete" ซึ่งหมายความว่าเอกสารยังไม่พร้อมหาก (e.type === "readystatechange" && document.readyState! == "complete") return; // เรียก ฟังก์ชันที่ลงทะเบียนทั้งหมด // โปรดทราบว่าทุกค่าของ // คุณสมบัติ funcs.length จะถูกตรวจสอบหนึ่งครั้ง ในกรณีหนึ่งในฟังก์ชันที่เรียกว่า // ลงทะเบียน functions.for เพิ่มเติม (var i = 0; i

เหตุการณ์ของเมาส์

มีเหตุการณ์ค่อนข้างน้อยที่เกี่ยวข้องกับเมาส์ ทั้งหมดอยู่ในตารางด้านล่าง เหตุการณ์เมาส์ทั้งหมดยกเว้น mouseenter และ mouseleave ฟองขึ้น คลิกเหตุการณ์บนลิงก์และปุ่มส่งแบบฟอร์มมีการดำเนินการเริ่มต้นที่สามารถยกเลิกได้ เป็นไปได้ในทางทฤษฎีที่จะยกเลิกเหตุการณ์เมนูบริบทและป้องกันไม่ให้เมนูบริบทปรากฏขึ้น แต่เบราว์เซอร์บางตัวมีการตั้งค่าที่ทำให้กิจกรรมนี้ไม่สามารถยกเลิกได้

เหตุการณ์เมาส์ JavaScript
ประเภทของ คำอธิบาย
คลิก เหตุการณ์ระดับสูงเกิดขึ้นเมื่อผู้ใช้กดและปล่อยปุ่มเมาส์หรือเปิดใช้งานองค์ประกอบ
เมนูบริบท เหตุการณ์ที่ยกเลิกได้ซึ่งเกิดขึ้นก่อนที่เมนูบริบทจะแสดงขึ้น เบราว์เซอร์ปัจจุบันแสดงเมนูบริบทเมื่อคลิกขวา ดังนั้นเหตุการณ์นี้จึงสามารถใช้เป็นเหตุการณ์การคลิกได้
dblclick เริ่มทำงานเมื่อผู้ใช้ดับเบิลคลิก
เมาส์ดาวน์ เริ่มทำงานเมื่อผู้ใช้กดปุ่มเมาส์
mouseup เริ่มทำงานเมื่อผู้ใช้ปล่อยปุ่มเมาส์
mousemove เพิ่มขึ้นเมื่อผู้ใช้เลื่อนตัวชี้เมาส์
เมาส์โอเวอร์ เพิ่มขึ้นเมื่อวางตัวชี้เมาส์ไว้เหนือองค์ประกอบ คุณสมบัติที่เกี่ยวข้องTarget (หรือจากองค์ประกอบใน IE) ระบุองค์ประกอบที่ตัวชี้เมาส์ถูกย้าย
mouseout เพิ่มขึ้นเมื่อตัวชี้เมาส์ออกจากองค์ประกอบ คุณสมบัติที่เกี่ยวข้องTarget (หรือ toElement ใน IE) ระบุองค์ประกอบที่ตัวชี้เมาส์ถูกย้ายไป
mouseenter คล้ายกับเมาส์โอเวอร์ แต่ไม่ปรากฏขึ้น ปรากฏตัวครั้งแรกใน IE และได้รับมาตรฐานใน HTML5 แต่ยังไม่รองรับเบราว์เซอร์ทั้งหมด
mouseleave เหมือนเลื่อนเมาส์ออก แต่ไม่ปรากฏขึ้น ปรากฏตัวครั้งแรกใน IE และได้รับมาตรฐานใน HTML5 แต่ยังไม่รองรับเบราว์เซอร์ทั้งหมด

วัตถุที่ส่งผ่านไปยังตัวจัดการเหตุการณ์ของเมาส์มีคุณสมบัติ ลูกค้าXและ ลูกค้าYที่กำหนดพิกัดของตัวชี้ที่สัมพันธ์กับหน้าต่าง ในการแปลงให้เป็นพิกัดเอกสาร คุณต้องเพิ่มตำแหน่งแถบเลื่อนหน้าต่างเข้าไป

คุณสมบัติ altKey, ctrlKey, metaKeyและ shiftKeyกำหนดสถานะของปุ่มตัวปรับแต่งต่างๆ ที่อาจถูกกดค้างไว้ในขณะที่เกิดเหตุการณ์: สามารถใช้เพื่อแยกความแตกต่างของการคลิกธรรมดาจากการคลิกด้วยการกดปุ่ม Shift เป็นต้น

คุณสมบัติ ปุ่มกำหนดปุ่มเมาส์ค้างไว้ในขณะที่มีกิจกรรม อย่างไรก็ตาม เบราว์เซอร์ต่าง ๆ เขียนค่าต่าง ๆ ให้กับคุณสมบัตินี้ ดังนั้นจึงเป็นการยากที่จะใช้งานในลักษณะพกพา

เบราว์เซอร์บางตัวจะเพิ่มเหตุการณ์การคลิกก็ต่อเมื่อคลิกปุ่มซ้ายเท่านั้น ดังนั้น หากคุณต้องการจัดการกับการคลิกปุ่มอื่นๆ คุณควรใช้เหตุการณ์ mousedown และ mouseup เหตุการณ์เมนูบริบทมักจะส่งสัญญาณว่ามีการดำเนินการคลิกขวา แต่ดังที่ระบุไว้ข้างต้น เป็นไปไม่ได้เสมอที่จะป้องกันไม่ให้เมนูบริบทปรากฏในตัวจัดการสำหรับเหตุการณ์นี้

ตัวอย่างด้านล่างแสดงให้เห็นถึงฟังก์ชันลาก () ที่เมื่อเรียกจากตัวจัดการเหตุการณ์ mousedown ให้ผู้ใช้สามารถลากองค์ประกอบเอกสารในตำแหน่งที่แน่นอนด้วยเมาส์ ฟังก์ชันลาก () ใช้งานได้กับทั้งโมเดลเหตุการณ์ DOM และ IE

ฟังก์ชันลาก () รับสองอาร์กิวเมนต์ อย่างแรกคือรายการที่ถูกลาก นี่อาจเป็นองค์ประกอบที่ยกเหตุการณ์ mousedown และองค์ประกอบที่มีอยู่ (เช่น คุณสามารถให้ผู้ใช้คว้าองค์ประกอบที่ดูเหมือนชื่อหน้าต่างแล้วลากองค์ประกอบที่มีที่ดูเหมือนหน้าต่าง) อย่างไรก็ตาม ไม่ว่าในกรณีใด จะต้องเป็นองค์ประกอบเอกสารที่มีตำแหน่งที่แน่นอนโดยใช้แอตทริบิวต์ตำแหน่ง CSS อาร์กิวเมนต์ที่สองคืออ็อบเจกต์เหตุการณ์ที่ได้รับพร้อมกับเหตุการณ์ mousedown:

/ * drag () - ลากและวางองค์ประกอบ HTML ในตำแหน่งที่แน่นอน ต้องเรียกใช้ฟังก์ชันนี้จากตัวจัดการเหตุการณ์ onmousedown เหตุการณ์ mousemove ที่ตามมาจะทำให้องค์ประกอบที่ระบุย้าย เหตุการณ์ mouseup จะทำให้การย้ายเสร็จสมบูรณ์ การใช้งานนี้ใช้ได้กับทั้งโมเดลเหตุการณ์มาตรฐานและ IE ใช้ฟังก์ชัน getScrollOffsets () อาร์กิวเมนต์ elementToDrag: องค์ประกอบที่ได้รับหรือมีเหตุการณ์ mousedown องค์ประกอบนี้ต้องอยู่ในตำแหน่งที่แน่นอน ค่าของคุณสมบัติ style.left และ style.top จะเปลี่ยนไปเมื่อผู้ใช้เลื่อนตัวชี้เมาส์ เหตุการณ์: วัตถุเหตุการณ์ที่ได้รับโดยตัวจัดการเหตุการณ์ mousedown * / ฟังก์ชั่นลาก (elementToDrag, เหตุการณ์) (// แปลงพิกัดเริ่มต้นของเมาส์เป็นพิกัดของเอกสาร var scroll = getScrollOffsets (); // ฟังก์ชั่นตัวช่วยประกาศด้านล่าง var startX = event.clientX + scroll.x; var startY = เหตุการณ์ clientY + scroll.y; // พิกัดเริ่มต้น (เทียบกับจุดเริ่มต้นของเอกสาร) ขององค์ประกอบที่ // จะถูกย้าย เนื่องจาก elementToDrag อยู่ในตำแหน่งที่แน่นอน // คุณสมบัติ offsetParent จะถือว่าอ้างถึงเอกสาร body var origX = elementToDrag.offsetLeft; var origY = elementToDrag.offsetTop; // ค้นหาระยะห่างระหว่างจุดเหตุการณ์ mousedown กับมุมซ้ายบนขององค์ประกอบ // ระยะทางนี้จะถูกนำมาพิจารณาเมื่อเลื่อน mouse pointer.var deltaX = startX - origX; var deltaY = startY - origY; // Register handlers mousemove and mouseup events // ที่ตามหลัง mousedown event.if (document.addEventListener) (// โมเดลเหตุการณ์มาตรฐาน // Register ตัวจัดการการสกัดกั้นในเอกสาร document.addEventListener ("mousemove", moveHandler, true); document.addEventListener ("mouseup", upHandler, จริง); ) else if (document.attachEvent) (// โมเดลเหตุการณ์ IE สำหรับ IE5-8 // ในโมเดลเหตุการณ์ IE เหตุการณ์จะถูกดักจับโดยการเรียก // เมธอด setCapture () ขององค์ประกอบ elementToDrag.setCapture (); elementToDrag AttachEvent ("onmousemove", moveHandler); elementToDrag.attachEvent ("onmouseup", upHandler); // ตีความการสูญเสียการจับภาพเหตุการณ์ของเมาส์เป็นเหตุการณ์ mouseup elementToDrag.attachEvent ("onlosecapture", upHandler);) // เหตุการณ์นี้ได้รับ จัดการและไม่ควรส่งต่อไปยังตัวจัดการอื่น หาก (event .stopPropagation) event.stopPropagation (); // โมเดลมาตรฐาน else event.cancelBubble = true; // IE // ป้องกันไม่ให้มีการดำเนินการเริ่มต้น ถ้า (event.preventDefault) event.preventDefault (); // โมเดลมาตรฐาน else event.returnValue = false; // IE / * ตัวจัดการนี้จับเหตุการณ์ mousemove ที่เกิดขึ้นในขณะที่องค์ประกอบกำลังถูกลาก เขามีหน้าที่ในการเคลื่อนย้ายองค์ประกอบ * / ฟังก์ชั่น moveHandler (e) (ถ้า (! e) e = window.event; // IE Event Model // ย้ายองค์ประกอบไปยังตำแหน่งของตัวชี้เมาส์ตามตำแหน่ง // ของแถบเลื่อนและออฟเซ็ตที่สัมพันธ์กับ click.var scroll เริ่มต้น = getScrollOffsets ( ); elementToDrag.style.left = (e.clientX + scroll.x - deltaX) + "px"; elementToDrag.style.top = (e.clientY + scroll.y - deltaY) + "px"; // และยกเลิกการเผยแพร่เหตุการณ์ต่อไป if (e.stopPropagation) e.stopPropagation (); // รุ่นมาตรฐานอื่น e.cancelBubble = true; // IE) / * ตัวจัดการนี้สกัดกั้นเหตุการณ์ mouseup สุดท้ายที่ เสร็จสิ้นการดำเนินการลาก * / function upHandler (e) (if (! e) e = window.event; // IE Event Model // ลบตัวจัดการเหตุการณ์การสกัดกั้น if (document.removeEventListener) (// DOM Event Model document.removeEventListener ("mouseup" , upHandler, true); document.removeEventListener ("mousemove", moveHandler, true);) else if (document.detachEvent) (// IE 5+ Event Model elementToDrag.detachEvent ("onlosecapture", upHandler); elementToDrag.detachEvent ( "onmouseup", upHandler); elementToDrag.detachEvent ("onmousemove", moveHandler); elementToDrag.releaseCapture ();) // และขัดจังหวะการเผยแพร่เหตุการณ์ต่อไป if (e.stopPropagation) e.stopPropagation (); // Standard model else e.cancelBubble = true; // IE)) // ส่งกลับตำแหน่งแถบเลื่อนปัจจุบันเป็นคุณสมบัติ x และ y ของฟังก์ชันวัตถุ getScrollOffsets (w) (// ใช้หน้าต่างที่ระบุหรือหน้าต่างปัจจุบัน // ถ้า ฟังก์ชันถูกเรียกโดยไม่มีอาร์กิวเมนต์ w = w | | window; // วิธีการต่อไปนี้ใช้ได้กับทุกเบราว์เซอร์ ยกเว้น IE เวอร์ชัน 8 และต่ำกว่า if (w.pageXOffset! = null) return (x: w.pageXOffset, y: w.pageYOffset); // สำหรับ IE (และเบราว์เซอร์อื่นๆ) ในโหมดมาตรฐาน var d = w.document; if (document.compatMode == "CSSICompat") ส่งคืน (x: d.documentElement.scrollLeft, y: d.documentElement.scrollTop); // สำหรับเบราว์เซอร์ในโหมดความเข้ากันได้ที่ส่งคืน (x: d.body.scrollLeft, y: d.body.scrollTop); )

ตัวอย่างต่อไปนี้สาธิตวิธีการใช้ฟังก์ชันลาก () ในไฟล์ HTML:

ลากฉัน

นี่คือการทดสอบ. ตรวจ สอบ ตรวจ สอบ.

ที่สำคัญที่สุดที่นี่คือแอตทริบิวต์ onmousedown บนองค์ประกอบที่ซ้อนกัน

... โปรดทราบว่ามันใช้คุณสมบัติ this.parentNode ซึ่งหมายความว่าองค์ประกอบคอนเทนเนอร์ทั้งหมดจะถูกย้าย

เหตุการณ์การป้อนข้อความ

เบราว์เซอร์รองรับเหตุการณ์การป้อนข้อมูลด้วยแป้นพิมพ์แบบเก่าสามเหตุการณ์ เหตุการณ์คีย์ดาวน์และคีย์อัพเป็นเหตุการณ์ระดับต่ำและจะกล่าวถึงในหัวข้อถัดไป อย่างไรก็ตาม เหตุการณ์ กดปุ่มเป็นระดับสูงที่ระบุว่ามีการป้อนอักขระที่พิมพ์ได้

ข้อกำหนดฉบับร่างของเหตุการณ์ระดับ 3 ของ DOM กำหนดเหตุการณ์ที่เป็นภาพรวมมากขึ้น ป้อนข้อความสร้างขึ้นเพื่อตอบสนองต่อการป้อนข้อความ ไม่ว่าจะป้อนด้วยวิธีใด

ด้วยเหตุการณ์ textinput ที่เสนอและเหตุการณ์ textInput ที่ใช้งานในปัจจุบัน อ็อบเจ็กต์เหตุการณ์อย่างง่ายจะถูกส่งผ่านที่มีคุณสมบัติข้อมูลที่เก็บข้อความที่ป้อน (คุณสมบัติอื่นที่เสนอคือ inputMethod ควรกำหนดแหล่งที่มาของอินพุต แต่ยังไม่ได้ดำเนินการ) สำหรับการป้อนข้อมูลด้วยแป้นพิมพ์คุณสมบัติข้อมูลมักจะประกอบด้วยอักขระเดียว แต่เมื่อพิมพ์จากแหล่งอื่นสามารถมีอักขระได้หลายตัว .

ออบเจ็กต์เหตุการณ์ที่ส่งไปพร้อมกับเหตุการณ์การกดปุ่มมีองค์กรที่ซับซ้อนมากขึ้น เหตุการณ์การกดแป้นแสดงถึงการป้อนข้อมูลของอักขระตัวเดียว อักขระนี้มีอยู่ในวัตถุเหตุการณ์เป็นค่าจุดรหัส Unicode ที่เป็นตัวเลข และคุณต้องใช้เมธอด String.fromCharCode () เพื่อแปลงเป็นสตริง ในเบราว์เซอร์ส่วนใหญ่ จุดรหัสของอักขระที่ป้อนจะถูกเก็บไว้ในคุณสมบัติ รหัสกุญแจวัตถุเหตุการณ์ อย่างไรก็ตาม ด้วยเหตุผลทางประวัติศาสตร์ Firefox ใช้คุณสมบัติแทน charCode.

ในเบราว์เซอร์ส่วนใหญ่ เหตุการณ์การกดแป้นพิมพ์จะเพิ่มขึ้นเมื่อมีการป้อนอักขระที่พิมพ์ได้เท่านั้น อย่างไรก็ตาม ใน Firefox เหตุการณ์การกดแป้นพิมพ์ยังเพิ่มขึ้นสำหรับอักขระที่ไม่สามารถพิมพ์ได้ เพื่อแยกความแตกต่างของทั้งสองกรณี (และละเว้นอักขระที่ไม่สามารถพิมพ์ได้) เราสามารถตรวจสอบว่าคุณสมบัติ charCode ของวัตถุเหตุการณ์มีอยู่และมีค่า 0

เหตุการณ์การป้อนข้อความ การป้อนข้อความ และการกดปุ่มสามารถยกเลิกได้เพื่อป้องกันการป้อนอักขระ นั่นคือ เหตุการณ์เหล่านี้สามารถใช้เพื่อกรองข้อมูลเข้า ตัวอย่างเช่น คุณสามารถป้องกันไม่ให้มีการป้อนตัวอักษรลงในช่องป้อนตัวเลข

ตัวอย่างด้านล่างแสดงโมดูล JavaScript ที่ใช้การกรองประเภทนี้ เขาค้นหารายการ ด้วยแอตทริบิวต์ data-allowed-chars เพิ่มเติม (ที่ไม่ได้มาตรฐาน) ลงทะเบียน textinput, textInput และตัวจัดการเหตุการณ์การกดแป้นพิมพ์สำหรับองค์ประกอบที่พบทั้งหมด และจำกัดอินพุตให้กับอักขระนิพจน์ทั่วไปที่ระบุในแอตทริบิวต์ data-allowed-chars:

/ * กรองอินพุตสำหรับรายการ โมดูลนี้ค้นหาองค์ประกอบทั้งหมด ในเอกสารที่มีแอตทริบิวต์ "data-allowed-chars" ลงทะเบียนตัวจัดการเหตุการณ์การกดแป้น textinput และ textInput สำหรับองค์ประกอบเหล่านี้เพื่อจำกัดชุดอักขระที่สามารถป้อนได้เพื่ออนุญาตให้ป้อนเฉพาะอักขระที่ระบุในแอตทริบิวต์เท่านั้น ถ้าธาตุ ยังมีแอตทริบิวต์ "data-messageid" ค่าของแอตทริบิวต์นี้จะถูกตีความว่าเป็นรหัสขององค์ประกอบอื่นในเอกสาร หากผู้ใช้ป้อนอักขระที่ไม่ถูกต้อง องค์ประกอบที่มี id ที่ระบุจะปรากฏให้เห็น หากผู้ใช้ป้อนอักขระที่ถูกต้อง รายการข้อความจะถูกซ่อน องค์ประกอบข้อความนี้มีจุดประสงค์เพื่อแสดงคำอธิบายว่าเหตุใดการป้อนข้อมูลของผู้ใช้จึงถูกปฏิเสธ ต้องจัดรูปแบบด้วย CSS เพื่อให้มองไม่เห็นในตอนแรก * / whenReady (ฟังก์ชัน () (// เรียกใช้ฟังก์ชันนี้เมื่อโหลดเอกสาร // ดึงองค์ประกอบทั้งหมด var inputelts = document.getElementsByTagName ("อินพุต"); // บายพาสพวกมันใน for loop (var i = 0; i< inputelts.length; i++) { var elt = inputelts[i]; // Пропустить элементы, не являющиеся текстовыми полями ввода // и не имеющие атрибута data-allowed-chars if (elt.type != "text" || !elt.getAttribute("data-allowed-chars")) continue; // Зарегистрировать наш обработчик события в этом элементе input // keypress старое событие и реализовано во всех браузерах. // textInput поддерживается в Safari и Chrome с 2010 года. // textinput версия проекта стандарта "DOM Level 3 Events". if (elt.addEventListener) { elt.addEventListener("keypress", filter, false); elt.addEventListener("textInput", filter, false); elt.addEventListener("textinput", filter, false); } // textinput не поддерживается версиями IE, в которых не реализован // метод addEventListener() else { elt.attachEvent("onkeypress", filter); } } // Обработчик событий keypress и textInput, фильтрующий ввод пользователя function filter(event) { // Получить объект события и целевой элемент target var e = event || window.event; // Модель стандартная или IE var target = e.target || e.srcElement; // Модель стандартная или IE var text = null; // Введенный текст // Получить введенный символ или текст if (e.type === "textinput" || e.type === "textInput") text = e.data; else { // Это было событие keypress // Введенный печатаемый символ в Firefox сохраняется в свойстве charCode var code = e.charCode || e.keyCode; // Если была нажата какая либо функциональная клавиша, не фильтровать ее if (code < 32 || // Управляющий символ ASCII e.charCode == 0 || // Функциональная клавиша (в Firefox) e.ctrlKey || e.altKey) // Удерживаемая клавиша-модификатор return; // Не фильтровать это событие // Преобразовать код символа в строку var text = String.fromCharCode(code); } // Отыскать необходимую нам информацию в этом элементе input var allowed = target.getAttribute("data-allowed-chars"); // Допустимые символы var messageid = target.getAttribute("data-messageid"); // Сообщение id if (messageid) // Если указано значение id, получить элемент var messageElement = document.getElementById(messageid); // Обойти в цикле символы во введенном тексте for(var i = 0; i < text.length; i++) { var c = text.charAt(i); allowed = new RegExp(allowed, "i"); // Создаем регулярное выражение if (c.search(allowed) == -1) { // Недопустимый символ? // Отобразить элемент с сообщением, если указан if (messageElement) messageElement.style.visibility="visible"; // Отменить действия по умолчанию, чтобы предотвратить вставку текста if (e.preventDefault) e.preventDefault(); if (e.returnValue) e.returnValue = false; return false; } } // Если все символы оказались допустимыми, скрыть элемент // с сообщением, если он был указан if (messageElement) messageElement.style.visibility = "hidden"; } });

ด้านล่างนี้เป็นตัวอย่างมาร์กอัป HTML ที่ใช้โมดูลนี้:

กรุณากรอกแบบฟอร์ม

ข้อมูลติดต่อ


รูปด้านล่างแสดงการใช้แบบฟอร์มนี้ ที่นี่หลังจากป้อนชื่อ ฉันใส่ตัวเลขที่ถูกบล็อกโดยอัตโนมัติและมีข้อความเตือนปรากฏขึ้น:

เหตุการณ์การกดแป้นและการป้อนข้อความเริ่มทำงานก่อนการแทรกข้อความใหม่ลงในองค์ประกอบเอกสารที่เน้นจริง เพื่อให้ตัวจัดการสามารถป้องกันไม่ให้ข้อความถูกแทรกโดยการยกเลิกเหตุการณ์

เบราว์เซอร์ยังใช้เหตุการณ์ ป้อนข้อมูลซึ่งเริ่มทำงานหลังจากใส่ข้อความลงในองค์ประกอบแล้ว เหตุการณ์นี้ไม่สามารถยกเลิกได้และวัตถุเหตุการณ์ที่เกี่ยวข้องไม่มีข้อมูลเกี่ยวกับข้อความที่แทรก — เพียงแค่แจ้งว่าเนื้อหาข้อความขององค์ประกอบมีการเปลี่ยนแปลง ตัวอย่างเช่น หากคุณต้องการให้แน่ใจว่าป้อนเฉพาะอักขระตัวพิมพ์ใหญ่ คุณสามารถกำหนดตัวจัดการเหตุการณ์อินพุตที่แสดงด้านล่าง:

เหตุการณ์อินพุตได้รับการกำหนดมาตรฐานในข้อกำหนด HTML5 และได้รับการสนับสนุนโดยเบราว์เซอร์สมัยใหม่ทั้งหมด ยกเว้น IE เอฟเฟกต์ที่คล้ายกันสามารถทำได้ใน IE โดยการตรวจจับการเปลี่ยนแปลงในคุณสมบัติค่าขององค์ประกอบข้อความอินพุตโดยใช้เหตุการณ์ที่กำหนดเอง เปลี่ยนทรัพย์สิน.

กิจกรรมคีย์บอร์ด

พัฒนาการ คีย์ดาวน์และ คีย์อัพเริ่มทำงานเมื่อผู้ใช้กดหรือปล่อยแป้นบนแป้นพิมพ์ สร้างขึ้นสำหรับปุ่มตัวปรับแต่ง ปุ่มฟังก์ชั่น และปุ่มตัวอักษรและตัวเลข หากผู้ใช้กดคีย์ค้างไว้นานพอที่จะเข้าสู่โหมดป้อนซ้ำอัตโนมัติ ระบบจะสร้างเหตุการณ์คีย์ดาวน์จำนวนมากขึ้นก่อนที่เหตุการณ์คีย์อัปจะเกิดขึ้น

วัตถุเหตุการณ์ที่สอดคล้องกับเหตุการณ์เหล่านี้มีคุณสมบัติ รหัสกุญแจด้วยค่าตัวเลขที่ระบุคีย์ที่กด สำหรับคีย์ที่สร้างอักขระที่สามารถพิมพ์ได้ โดยทั่วไปแล้ว คุณสมบัติ keyCode ประกอบด้วยจุดโค้ด Unicode ที่สอดคล้องกับอักขระพื้นฐานที่แสดงบนคีย์ คีย์ที่มีตัวอักษรจะสร้างค่าคีย์โค้ดที่สอดคล้องกับอักขระตัวพิมพ์ใหญ่เสมอ โดยไม่คำนึงถึงสถานะของคีย์ Shift เนื่องจากเป็นอักขระที่ปรากฎบนคีย์

ในทำนองเดียวกัน คีย์ตัวเลขจะสร้างค่าคีย์โค้ดที่ตรงกับอักขระตัวเลขที่แสดงบนคีย์เสมอ แม้ว่าคุณจะกดแป้น Shift ค้างไว้เพื่อป้อนเครื่องหมายวรรคตอน สำหรับคีย์ที่ไม่ตรงกับอักขระที่พิมพ์ได้ คุณสมบัติ keyCode จะมีความหมายอื่น ค่าคุณสมบัติ keyCode เหล่านี้ไม่เคยได้รับมาตรฐาน อย่างไรก็ตาม เบราว์เซอร์เหล่านี้ไม่ได้แตกต่างกันมากนักจนไม่สามารถรับประกันความสามารถในการพกพาได้

เช่นเดียวกับอ็อบเจกต์เหตุการณ์ของเมาส์ ออบเจ็กต์เหตุการณ์ของคีย์บอร์ดมีคุณสมบัติ altKey, ctrlKey, metaKeyและ shiftKeyที่เป็นจริงหากคีย์ตัวปรับแต่งที่เกี่ยวข้องถูกกดค้างไว้เมื่อเหตุการณ์ถูกยกขึ้น

เหตุการณ์ keydown และ keyup และคุณสมบัติ keyCode มีมานานกว่าทศวรรษแล้ว แต่ไม่เคยมีการกำหนดมาตรฐาน DOM Level 3 Events Draft สร้างมาตรฐานให้กับประเภท keydown และ keyup event แต่ไม่ได้เป็นมาตรฐานของคุณสมบัติ keyCode แต่จะกำหนดคุณสมบัติใหม่ คีย์ ซึ่งควรมีชื่อของคีย์เป็นสตริง หากคีย์ตรงกับอักขระที่พิมพ์ได้ คุณสมบัติของคีย์ต้องมีอักขระที่พิมพ์ได้นั้น สำหรับปุ่มฟังก์ชัน คุณสมบัติคีย์ต้องมีค่าต่างๆ เช่น F2, Home หรือ Left

ในขณะที่เขียนนี้ คุณสมบัติคีย์ DOM ระดับ 3 เหตุการณ์ยังไม่ได้ถูกนำมาใช้ในเบราว์เซอร์ใดๆ อย่างไรก็ตาม เบราว์เซอร์ที่ใช้ Webkit, Safari และ Chrome กำหนดคุณสมบัติของวัตถุเหตุการณ์เหล่านี้ ตัวระบุคีย์... สำหรับคีย์ฟังก์ชัน เช่น คุณสมบัติคีย์ คุณสมบัติ keyIdentifier ไม่มีตัวเลข แต่มีสตริงที่มีชื่อของคีย์ เช่น Shift หรือ Enter สำหรับคีย์ที่สอดคล้องกับอักขระที่พิมพ์ได้ คุณสมบัตินี้มีการแสดงสตริงที่เป็นมิตรกับผู้ใช้น้อยกว่าของจุดโค้ด Unicode ของอักขระ ตัวอย่างเช่น คีย์ A สอดคล้องกับ U + 0041

ตัวอย่างด้านล่างกำหนดคลาสคีย์แมปที่แมปตัวระบุช็อตคัท เช่น PageUp, Alt_Z และ ctrl + alt + shift + F5 กับฟังก์ชัน JavaScript ที่เรียกใช้เพื่อตอบสนองต่อการกดแป้นพิมพ์เหล่านั้น คำจำกัดความของ Keybind จะถูกส่งไปยังตัวสร้าง Keymap () ในรูปแบบของวัตถุ JavaScript ที่มีชื่อคุณสมบัติตรงกับตัวระบุทางลัดและที่มีค่าคุณสมบัติมีการอ้างอิงถึงฟังก์ชันตัวจัดการ การผูกจะถูกเพิ่มและลบออกโดยใช้วิธีการผูก () และการยกเลิกการเชื่อมโยง ()

ติดตั้งอ็อบเจ็กต์ Keymap ให้กับองค์ประกอบ HTML (โดยปกติคืออ็อบเจ็กต์ Document) โดยใช้วิธีติดตั้ง () การตั้งค่าวัตถุ Keymap จะลงทะเบียนตัวจัดการสำหรับเหตุการณ์ keydown บนองค์ประกอบนี้ ทุกครั้งที่กดปุ่ม เครื่องจัดการจะตรวจสอบฟังก์ชันที่ตรงกับชุดค่าผสมนั้น ถ้าฟังก์ชั่นนั้นมีอยู่ก็จะถูกเรียก

ตัวจัดการเหตุการณ์ keydown ใช้คุณสมบัติคีย์ DOM ระดับ 3 เหตุการณ์ หากมี มิฉะนั้น จะพยายามใช้คุณสมบัติ Webkit keyIdentifier และในฐานะทางเลือก ตัวจัดการใช้คุณสมบัติ keyCode ที่ไม่เป็นมาตรฐาน:

// กำหนดตัวระบุการแมป -> ตัวจัดการถ้า (การโยง) (// คัดลอกการโยงเริ่มต้นแมปลงไปสำหรับ (ชื่อในการผูก) this.bind ( ชื่อ, การโยง);)) // ผูกตัวระบุคีย์ที่ระบุกับฟังก์ชันที่ระบุโดยตัวจัดการ Keymap.prototype.bind = ฟังก์ชัน (คีย์, func) (this.map = func;); // ลบการเชื่อมโยงสำหรับรหัสคีย์ที่ระบุ Keymap.prototype.unbind = function (คีย์) (ลบ this.map;); // ติดตั้งออบเจ็กต์ Keymap นี้ไปยังองค์ประกอบ HTML ที่ระบุ Keymap.prototype.install = function (องค์ประกอบ) (var keymap = this; // กำหนดฟังก์ชันตัวจัดการเหตุการณ์ function handler (เหตุการณ์) (ส่งคืน keymap.dispatch (event, element);) // ตั้งค่า if (element.addEventListener) element.addEventListener ("keydown", handler, false); else if (element.attachEvent) element.attachEvent ("onkeydown", ตัวจัดการ);); // เมธอดนี้มอบหมายการจัดการเหตุการณ์ของแป้นพิมพ์ตาม Keymap.prototype bindings.dispatch = function (event, element) (// ในขั้นต้น ไม่มีชื่อคีย์ตัวแก้ไขหรือชื่อคีย์ var modifiers = ""; var keyname = null; / / สร้างสตริงตัวแก้ไขมาตรฐานจากตัวพิมพ์เล็ก // อักขระตามลำดับตัวอักษร หากตัวแก้ไข (event.altKey) + = "alt_"; if (event.ctrlKey) ตัวแก้ไข + = "ctrl_"; if (เหตุการณ์ .metaKey) ตัวแก้ไข + = " meta_"; if (event.shiftKey) modifiers + = "shift_"; // ชื่อคีย์นั้นหาได้ง่ายหากใช้คุณสมบัติคีย์ // กำหนดโดยมาตรฐาน DOM ระดับ 3: if (event.key) keyname = event.key; // คุณสามารถใช้คุณสมบัติ keyIdentifier // เพื่อรับชื่อของปุ่มฟังก์ชั่นใน Safari และ Chrome อื่น ๆ หาก (event.keyIdentifier && event.keyIdentifier.substring (0,2)! == "U +") keyname = event. keyIdentifier; // มิฉะนั้น คุณสามารถใช้คุณสมบัติ keyCode // และ display code> ชื่อด้านล่าง ke yname = Keymap.keyCodeToKeyName; // หากไม่สามารถระบุชื่อคีย์ได้ ให้ข้ามเหตุการณ์ // แล้วย้อนกลับ ถ้า (! keyname) กลับมา; // ตัวระบุคีย์ตามรูปแบบบัญญัติประกอบด้วยชื่อตัวแก้ไข // และชื่อคีย์ตัวพิมพ์เล็ก var keyid = modifiers + keyname.toLowerCase (); // ตรวจสอบว่ามีการผูกมัดสำหรับรหัสคีย์ที่ระบุ var handler = this.map หรือไม่ if (ตัวจัดการ) (// หากตัวจัดการสำหรับคีย์นี้ ให้เรียกมันว่า // เรียกใช้ฟังก์ชันตัวจัดการ var retval = handler.call (องค์ประกอบ เหตุการณ์ keyid); // หากตัวจัดการแสดงค่าเป็นเท็จ ให้ยกเลิกการดำเนินการเริ่มต้น / / และยกเลิกเหตุการณ์ bubbling if (retval === false) (if (event.stopPropagation) event.stopPropagation (); // DOM model else event.cancelBubble = true; // IE model if (event.preventDefault) เหตุการณ์ ป้องกันDefault (); / / DOM อื่น event.returnValue = false; // IE) // ส่งกลับค่าที่ได้รับจาก handler return retval;)); // ฟังก์ชัน Helper สำหรับแปลงตัวระบุคีย์เป็นรูปแบบบัญญัติ // เราจำเป็นต้องแปลงตัวระบุ "meta" เป็น "ctrl" เพื่อให้ // ตัวระบุ Meta-C คือ "Command-C" บน Mac และ "Ctrl-C" ในส่วนอื่นๆ ทั้งหมด Keymap.normalize = function (keyid) (keyid = keyid.toLowerCase (); // ตัวพิมพ์เล็ก var words = keyid.split (/ \ s + | [\ - + _] /); // แยกตัวดัดแปลง var keyname = words ป๊อป (); // ชื่อคีย์คือคำสุดท้าย ชื่อคีย์ = Keymap.aliases || ชื่อคีย์; // นี่คือนามแฝงหรือไม่ word.sort (); // Sort modifiers word.push (keyname); // นำค่าปกติกลับมา ชื่อส่งคืนคำ .join ("_"); // นำทั้งหมดมารวมกัน) Keymap.aliases = (// แมปชื่อแทนคีย์ที่คุ้นเคยกับ // ชื่อ "ทางการ" ที่ใช้ใน DOM ระดับ 3 และจับคู่รหัส // ตามชื่อด้านล่าง ชื่อและค่าต้องประกอบด้วยอักขระตัวพิมพ์เล็ก "escape": "esc", "return": "enter", "delete": "del", "ctrl": "control", "space" : "spacebar", "ins": "insert"); // คุณสมบัติ keyCode เก่าของวัตถุเหตุการณ์ keydown ไม่ได้มาตรฐาน // แต่ค่าต่อไปนี้สามารถใช้ได้กับความสำเร็จในเบราว์เซอร์และระบบปฏิบัติการส่วนใหญ่ Keymap.keyCodeToKeyName = (// แป้นที่มีคำหรือลูกศร 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Control", 18: "Alt", 19: "หยุดชั่วคราว", 20: "CapsLock", 27: "Esc", 32: "Spacebar", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "ซ้าย", 38: "ขึ้น", 39: "ขวา", 40: "ลง", 45: "แทรก", 46: "Del", // ปุ่มตัวเลขบนแป้นพิมพ์หลัก (ไม่ใช่ปุ่มรอง) 48: "0 ", 49:" 1 ", 50:" 2 ", 51:" 3 ", 52:" 4 ", 53:" 5 ", 54:" 6 ", 55:" 7 ", 56:" 8 ", 57: "9", // ปุ่มตัวอักษร โปรดทราบว่าไม่มีความแตกต่าง // ระหว่างตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก 65: "A", 66: "B", 67: "C", 68: "D" , 69 : "E", 70: "F", 71: "G", 72: "H", 73: "I", 74: "J", 75: "K", 76: "L", 77 : " M ", 78:" N ", 79:" O ", 80:" P ", 81:" Q ", 82:" R ", 83:" S ", 84:" T ", 85:" U " , 86: "V", 87: "W", 88: "X", 89: "Y", 90: "Z", // ปุ่มตัวเลขบนแป้นพิมพ์เพิ่มเติมและปุ่มที่มีเครื่องหมายวรรคตอน // ( ไม่รองรับใน Opera) 96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7" , 104: "8", 105: "9", 106: "ทวีคูณ", 107: "บวก", 109: "ส ลบ ", 110:" ทศนิยม ", 111:" หาร ", // ปุ่มฟังก์ชัน 112:" F1 ", 113:" F2 ", 114:" F3 ", 115:" F4 ", 116:" F5 ", 117 : "F6", 118: "F7", 119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 124: "F13", 125: " F14 ", 126:" F15 ", 127:" F16 ", 128:" F17 ", 129:" F18 ", 130:" F19 ", 131:" F20 ", 132:" F21 ", 133:" F22 " , 134: "F23", 135: "F24", // ปุ่มเครื่องหมายวรรคตอนที่ไม่ต้องการ // กดปุ่ม Shift ค้างไว้เพื่อเข้าสู่ // ไม่สามารถใช้ยัติภังค์แบบพกพาได้: FF คืนค่า // รหัสเดียวกันกับคีย์การลบ 59: ";", 61: "=", 186: ";", 187: "=", // Firefox และ Opera คืนค่า 59.61 188: ",", 190: ".", 191: "/", 192: "` ", 219:" [", 220:" \\ ", 221:"] ", 222: "" ");

ตัวอย่างการใช้วัตถุ Keymap แสดงอยู่ด้านล่าง:

Window.onload = function () (var keymap = new Keymap; // สร้าง Keymap object keymap.bind ใหม่ ("ctrl + a", // Combination Ctrl + A function (event, keyid) (การแจ้งเตือน ("คุณกด: " + keyid))); // การเชื่อมโยงอื่น Ctrl + Enter keymap.bind ("ctrl + enter", ฟังก์ชัน (เหตุการณ์, keyid) (การแจ้งเตือน ("คุณกด:" + keyid))); keymap.install (เอกสาร. เนื้อหา); // ตั้งค่าวัตถุ Keymap สำหรับทั้งเอกสาร);