เมธอด JavaScript addEventListener() ของอ็อบเจ็กต์ EventTarget ช่วยให้คุณสามารถลงทะเบียนตัวจัดการเหตุการณ์ประเภทเฉพาะสำหรับเป้าหมายเฉพาะได้
เป้าหมายอาจเป็นออบเจ็กต์ เช่น Element, Document, Window หรือออบเจ็กต์อื่นๆ ที่รองรับเหตุการณ์ เช่น ออบเจ็กต์ เช่น XMLHttpRequest ซึ่งใช้กันอย่างแพร่หลายในคำขอแบบอะซิงโครนัส อาแจ็กซ์(จากภาษาอังกฤษ Javascript และ XML แบบอะซิงโครนัส- "JavaScript และ XML แบบอะซิงโครนัส") ซึ่งอนุญาตให้เพจเฉพาะอัปเดตเพียงบางส่วนเท่านั้นโดยไม่รบกวนประสบการณ์ผู้ใช้
โปรดทราบว่าคุณสามารถใช้เมธอด RemoveEventListener() เพื่อลบตัวจัดการเหตุการณ์ที่แนบมาโดยใช้เมธอด addEventListener()
การสนับสนุนเบราว์เซอร์สำหรับไวยากรณ์ JavaScript: เป้า.addEventListener( พิมพ์, ผู้ฟัง); เป้า.addEventListener( พิมพ์, ผู้ฟัง, ตัวเลือก); เป้า.addEventListener( พิมพ์, ผู้ฟัง, ใช้Capture); พิมพ์- เชือก ผู้ฟัง- การทำงาน ตัวเลือก- วัตถุ ใช้Capture- Boolean Specification Document Object Model (DOM) ระดับ 2 เหตุการณ์ ค่าพารามิเตอร์พิมพ์ | ค่าสตริงที่แสดงถึงประเภทของเหตุการณ์ที่จะรับฟัง (ค่าจะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) พารามิเตอร์ที่จำเป็น |
ผู้ฟัง | วัตถุที่ได้รับการแจ้งเตือนเมื่อมีเหตุการณ์ประเภทที่ระบุเกิดขึ้น (วัตถุที่ใช้อินเทอร์เฟซเหตุการณ์) นี่ต้องเป็นออบเจ็กต์ที่ใช้อินเทอร์เฟซ EventListener หรือฟังก์ชัน จาวาสคริปต์- พารามิเตอร์ที่จำเป็น |
ตัวเลือก | ออบเจ็กต์ที่ระบุคุณลักษณะของผู้ฟังเหตุการณ์ (เป็นทางเลือก) ตัวเลือกที่มี:
|
ใช้Capture | ค่าบูลีนที่กำหนดว่าเหตุการณ์ประเภทนี้จะถูกส่งไปยังผู้ฟังที่ลงทะเบียน (ตัวจัดการเหตุการณ์) ก่อนที่จะถูกส่งไปยัง EventTarget ใดๆ ที่อยู่ด้านล่างในแผนผังหรือไม่ ดอม. หากคุณส่งค่าบูลีน true ฟังก์ชันจะถูกลงทะเบียนเป็นตัวจัดการการสกัดกั้น และจะถูกเรียกในเฟสการสกัดกั้น ( ขั้นตอนการจับภาพ- ค่าเริ่มต้นคือเท็จ - ตัวจัดการเหตุการณ์จะเริ่มทำงานในช่วงฟองสบู่ ( เฟสเดือด- พารามิเตอร์ทางเลือก ใช้Captureพารามิเตอร์ |
- 1
.addEventListener("dblclick ", function ()( // ตั้งค่าแต่ละองค์ประกอบ li ให้กับตัวจัดการเหตุการณ์ dblclick นี้ .style.color = "#000 "; // ตั้งค่าสีข้อความเป็นสีดำ ) ) ) )
- ในตัวอย่างนี้ เราได้วางรายการสัญลักษณ์แสดงหัวข้อย่อย ( ) ภายในที่เราวางไว้ห้า
- องค์ประกอบรายการ ( - โดยใช้เมธอด querySelector() ที่เราเลือกอันดับแรก
- องค์ประกอบ
- ในเอกสารและใช้เมธอด querySelectorAll() องค์ประกอบทั้งหมด
ในเอกสารและเริ่มต้นตัวแปรด้วยค่าเหล่านี้
- การใช้เมธอด addEventListener() ที่เราตั้งค่าองค์ประกอบ ตัวจัดการเหตุการณ์ "คลิก" (คลิกซ้ายบนองค์ประกอบ) ซึ่งใช้คุณสมบัติเป้าหมายของวัตถุเหตุการณ์ ตรวจสอบชื่อแท็กขององค์ประกอบ และหากค่านี้ตรงกับค่า "LI" จากนั้นจะเปลี่ยนสไตล์สีข้อความเป็นเมื่อถูกกระตุ้น โปรดทราบว่ามักจะสะดวกกว่าในการติดตั้งตัวจัดการหนึ่งตัวต่อองค์ประกอบหลัก แทนที่จะติดตั้งสำหรับแต่ละองค์ประกอบแยกกัน โดยเฉพาะอย่างยิ่งเมื่อจำนวนองค์ประกอบมีการเปลี่ยนแปลงแบบไดนามิก ซึ่งในกรณีนี้ไม่จำเป็นต้องอัปเดตตัวจัดการสำหรับองค์ประกอบ
หากค่าบูลีนเป็น true ฟังก์ชันที่ Listener ระบุจะไม่ยกเลิกการกระทำเริ่มต้นของเหตุการณ์ (เรียกเมธอด PreventDefault()) หากตัวจัดการเหตุการณ์เรียกใช้เมธอด PreventDefault() เบราว์เซอร์ของผู้ใช้จะเพิกเฉยและสร้างคำเตือนในคอนโซล ค่าบูลีนเป็นเท็จบ่งชี้ว่าฟังก์ชันตัวจัดการสามารถยกเลิกการกระทำเริ่มต้นของเหตุการณ์ได้ (สามารถเรียกเมธอด PreventDefault() ได้)
ตามข้อกำหนด ค่าเริ่มต้นสำหรับพารามิเตอร์แบบพาสซีฟจะเป็นเท็จเสมอ อย่างไรก็ตาม วิธีนี้ช่วยให้ผู้ฟังเหตุการณ์ที่จัดการเหตุการณ์การสัมผัสบางอย่างสามารถบล็อกเธรดของเบราว์เซอร์หลักเมื่อพยายามจัดการการเลื่อน ซึ่งอาจส่งผลให้ประสิทธิภาพลดลงอย่างมากในระหว่างการประมวลผลการเลื่อน
เพื่อป้องกันปัญหานี้ เบราว์เซอร์บางตัว (โดยเฉพาะ และ ) เปลี่ยนค่าเริ่มต้นของพารามิเตอร์แบบพาสซีฟเป็นจริงสำหรับเหตุการณ์ touchstart และ touchmove ในโหนดระดับเอกสาร Window , Document และ Document .body วิธีนี้จะป้องกันไม่ให้ผู้ฟังเหตุการณ์ถูกเรียก ดังนั้นจึงไม่สามารถบล็อกเพจไม่ให้แสดงผลขณะเลื่อนได้
คุณไม่จำเป็นต้องกังวลเกี่ยวกับค่าแฝงสำหรับเหตุการณ์การเลื่อนที่ซ่อนอยู่ เนื่องจากไม่สามารถยกเลิกได้ และผู้ฟังเหตุการณ์จะไม่สามารถบล็อกเพจไม่ให้แสดงต่อไปได้
ความแตกต่างของการใช้สิ่งนี้ในตัวจัดการเหตุการณ์ตามกฎแล้ว จำเป็นต้องส่งองค์ประกอบที่ตัวจัดการเหตุการณ์ถูกทริกเกอร์ โดยเฉพาะอย่างยิ่งเมื่อใช้ตัวจัดการเหตุการณ์ทั่วไปสำหรับองค์ประกอบประเภทเดียวกัน หากคุณเพิ่มฟังก์ชันตัวจัดการเหตุการณ์ปกติให้กับองค์ประกอบโดยใช้เมธอด addEventListener() ค่านี้ภายในตัวจัดการดังกล่าวจะเป็นการอ้างอิงถึงองค์ประกอบ ค่านี้จะเหมือนกับค่าของคุณสมบัติ currentTarget ของอาร์กิวเมนต์เหตุการณ์ของออบเจ็กต์เหตุการณ์ที่ส่งผ่านไปยังตัวจัดการเหตุการณ์ ตัวอย่างเช่น:
.forEach(ฟังก์ชัน (.addEventListener("คลิก", ฟังก์ชัน ( จ) ( console .log(this .className); // จะพิมพ์ค่าของคุณสมบัติ className ขององค์ประกอบองค์ประกอบคอนโซล .log( ไปยังคอนโซล) จ.currentTarget === นี้ ); // จริง ) )โปรดทราบจุดสำคัญ ค่าของสิ่งนี้สามารถเปลี่ยนแปลงได้ เช่น ฟังก์ชันลูกศรไม่มีบริบทนี้เอง และในกรณีนี้ จะไม่อ้างอิงถึงองค์ประกอบ:
.forEach(ฟังก์ชัน (.addEventListener("คลิก", ( จ) => ( console .log(this .className); // สิ่งนี้จะไม่อ้างถึงองค์ประกอบองค์ประกอบ console .log( จ.currentTarget === นี้ ); // เท็จ)ลองดูที่สถานการณ์อื่นที่มีการระบุตัวจัดการเหตุการณ์เป็นแอตทริบิวต์ของเหตุการณ์ HTMLองค์ประกอบ. รหัส จาวาสคริปต์ในค่าแอตทริบิวต์จะถูกรวมเข้ากับฟังก์ชันตัวจัดการอย่างมีประสิทธิภาพซึ่งผูกค่านี้ในลักษณะที่สอดคล้องกับเมธอด addEventListener() (ในโค้ดนี้แสดงถึงการอ้างอิงถึงองค์ประกอบ):
// แสดงค่าของคุณสมบัติ id ขององค์ประกอบไปยังคอนโซลเมื่อคุณคลิกที่องค์ประกอบ ข้อมูลเกี่ยวกับค่าของแอตทริบิวต์ส่วนกลางขององค์ประกอบจะแสดงในคอนโซล เนื่องจากค่านี้ภายในฟังก์ชันที่เรียกโดยโค้ดในค่าแอตทริบิวต์จะทำงานตามกฎมาตรฐาน และในกรณีนี้อ้างถึง องค์ประกอบที่ทำให้เกิดเหตุการณ์ ลองดูตัวอย่างต่อไปนี้:
// สิ่งนี้จะไม่อ้างถึงองค์ประกอบที่ทำให้เกิดเหตุการณ์) ;โปรดทราบว่าค่านี้ภายในฟังก์ชัน myFunc() จะเป็นการอ้างอิงไปยังอ็อบเจ็กต์ Window ส่วนกลาง หรือจะไม่ได้กำหนดไว้หากระบุโหมดเข้มงวด ( โหมดเข้มงวด).
เพื่อที่จะส่งผ่านบริบทที่จำเป็น คุณสามารถใช้เมธอด call() ของอ็อบเจ็กต์ Function ซึ่งอนุญาตให้คุณเรียกใช้ (รัน) ฟังก์ชันเป็นเมธอดของอ็อบเจ็กต์ โดยตั้งค่าบริบทการดำเนินการ ( this ) ให้เป็นค่าที่ระบุ ในขณะที่ผ่านข้อโต้แย้งที่จำเป็น:
const myFunc = function () ( console .log(this .id) // สิ่งนี้จะอ้างถึงองค์ประกอบที่ทำให้เกิดเหตุการณ์ );ในกรณีนี้ เมื่อเหตุการณ์ถูกทริกเกอร์ ค่าของแอตทริบิวต์ส่วนกลางขององค์ประกอบที่ทริกเกอร์เหตุการณ์จะถูกพิมพ์ไปยังคอนโซล
สำหรับการเพิ่มกิจกรรมการคลิก เมื่อผู้ใช้คลิกที่ปุ่ม ID="demo" องค์ประกอบผลลัพธ์คือ "Hello World":
- Document.getElementById("demo") innerHTML = "สวัสดีชาวโลก";
});
ลองเลย »ความหมายและการใช้งานaddEventListener() วิธีการใช้เพื่อเพิ่มตัวจัดการเหตุการณ์สำหรับองค์ประกอบที่กำหนด
ตัวอย่างคุณสามารถเพิ่มกิจกรรมได้มากเท่าที่คุณต้องการในเอกสาร การเพิ่มกิจกรรมจะไม่เขียนทับกิจกรรมที่มีอยู่
ตัวอย่างนี้สาธิตวิธีการเพิ่มเหตุการณ์การคลิกสองครั้งในองค์ประกอบ:
Document.getElementById("myBtn") addEventListener("คลิก", MYFUNCTION);
ลองเลย »
ตัวอย่างคุณสามารถเพิ่มเหตุการณ์ประเภทต่างๆ ในองค์ประกอบเดียวได้
ตัวอย่างนี้แสดงวิธีการเพิ่มหลายเหตุการณ์ที่มีองค์ประกอบ:
Document.getElementById("myBtn") addEventListener("MouseOver", MYFUNCTION);
- Document.getElementById("myBtn") addEventListener("คลิก", someOtherFunction);
- Document.getElementById("myBtn") addEventListener("MouseOut", someOtherFunction);
ลองเลย »
ตัวอย่างเมื่อส่งค่าพารามิเตอร์ ให้ใช้การเรียกใช้ฟังก์ชันกับพารามิเตอร์ "ฟังก์ชันที่ไม่ระบุชื่อ":
document.getElementById("myBtn"). addEventListener("คลิก", function()(
tyPrinsHop(p1, p2);
});
ลองเลย »
ตัวอย่างแก้ไขรายการอ้างอิง:
document.getElementById("myBtn"). addEventListener("คลิก", function()(
this.style.พื้นหลังสี = "สีแดง";
});
ลองเลย »
ตัวอย่างใช้ตัวเลือกขั้นสูงเพื่อแสดงให้เห็นความแตกต่าง ใช้Captureเดือดและจับเฟส:
Document.getElementById("myDiv") addEventListener("คลิก", tyRipsOn, จริง);
แนบเหตุการณ์การคลิกที่องค์ประกอบ เมื่อผู้ใช้คลิกที่ปุ่ม ผลลัพธ์จะเป็น "Hello World"
องค์ประกอบที่มี id = "สาธิต":
document.getElementById("demo").innerHTML = "สวัสดีชาวโลก";
});ตัวอย่าง "ลองด้วยตัวเอง" เพิ่มเติมด้านล่าง
ความหมายและการใช้งานaddEventListener() วิธีการแนบตัวจัดการเหตุการณ์สำหรับองค์ประกอบที่ระบุ
ตัวอย่างคุณสามารถเพิ่มเหตุการณ์จำนวนมากลงในองค์ประกอบเดียวได้โดยไม่ต้องเขียนทับเหตุการณ์ที่มีอยู่
ตัวอย่างนี้แสดงวิธีเพิ่มเหตุการณ์การคลิกสองครั้งในองค์ประกอบเดียวกัน:
Document.getElementById("myBtn").addEventListener("คลิก", myFunction);
ลองด้วยตัวเอง"
ตัวอย่างคุณสามารถเพิ่มเหตุการณ์ประเภทต่างๆ ลงในองค์ประกอบเดียวได้
ตัวอย่างนี้แสดงวิธีการเพิ่มเหตุการณ์จำนวนมากในองค์ประกอบเดียวกัน:
Document.getElementById("myBtn").addEventListener("mouseover", myFunction);
ลองด้วยตัวเอง"
document.getElementById("myBtn").addEventListener("คลิก", someOtherFunction);
document.getElementById("myBtn").addEventListener("mouseout", someOtherFunction);
ตัวอย่างเมื่อส่งค่าพารามิเตอร์ ให้ใช้ "ฟังก์ชันที่ไม่ระบุชื่อ" ซึ่งจะเรียกฟังก์ชันที่ระบุพร้อมกับพารามิเตอร์:
Document.getElementById("myBtn").addEventListener("คลิก", function() (
ลองด้วยตัวเอง"
ฟังก์ชั่นของฉัน(p1, p2);
});
ตัวอย่างการเปลี่ยนสีพื้นหลังขององค์ประกอบ:
Document.getElementById("myBtn").addEventListener("คลิก", function())(
this.style.พื้นหลังสี = "สีแดง";
- ในเอกสารและใช้เมธอด querySelectorAll() องค์ประกอบทั้งหมด