เหตุการณ์เป็นวิธีการใช้งานของการเขียนโปรแกรมแบบอะซิงโครนัสการสื่อสารระหว่างองค์ประกอบต่าง ๆ ของโปรแกรมและ DOM สนับสนุนเหตุการณ์จำนวนมาก
บทความนี้ใช้จุดเหล่านี้เพื่อวิเคราะห์หลักการพื้นฐานของการประมวลผลเหตุการณ์ในรายละเอียด: ประเภทเหตุการณ์, เป้าหมายเหตุการณ์, ตัวจัดการเหตุการณ์, วัตถุเหตุการณ์, การแพร่กระจายเหตุการณ์
ในที่สุดฉันจะแนะนำวัตถุเหตุการณ์ให้คุณ;
1. ประเภทเหตุการณ์: เป็นสตริงตัวพิมพ์เล็กเต็มรูปแบบที่ใช้เพื่อระบุประเภทของเหตุการณ์ที่เกิดขึ้นเช่น 'MouseOver'
ประเภทเหตุการณ์แบบดั้งเดิม: เหตุการณ์ในรูปแบบเหตุการณ์หน้าต่างเหตุการณ์เมาส์เหตุการณ์คีย์บอร์ดเหตุการณ์ DOM เหตุการณ์ HTML5 หน้าจอสัมผัสและกิจกรรมอุปกรณ์มือถือ ฯลฯ
2. เป้าหมายเหตุการณ์: วัตถุที่ทริกเกอร์เหตุการณ์
3. ผู้ฟังเหตุการณ์: ฟังก์ชั่นที่จัดการหรือตอบสนองต่อเหตุการณ์ เมื่อวัตถุทริกเกอร์เหตุการณ์เบราว์เซอร์จะเรียกใช้ฟังก์ชันที่ลงทะเบียนโดยอัตโนมัติบนวัตถุ
ลงทะเบียน Handler กิจกรรม (ฟังกิจกรรม):
1. ลงทะเบียนเป็นแอตทริบิวต์ HTML (มันจะถูกเรียกใช้ในเฟสเดือด) เช่น <table id = "t" onClick = "modifyText ();">; และบางประเภทเหตุการณ์มักจะถูกเรียกใช้โดยตรงบนเบราว์เซอร์แทนที่จะเป็นองค์ประกอบเอกสารเฉพาะใด ๆ ตัวจัดการเหตุการณ์เหล่านี้วางอยู่บนแท็ก <body> แต่เบราว์เซอร์จะลงทะเบียนบนวัตถุหน้าต่างเช่น <body onload = "การแจ้งเตือน ('Hello World!')"> และเหตุการณ์เหล่านี้รวมถึง:
onafterprint onfocus ononline onresize onbeforeprint onhashchange
OnPageHide OnStorage OnBeforeUnload OnLoad OnPageshow Onundo
onblur onmessage onpopstate onunload oneError onoffline onDredo
ค่าของเหตุการณ์ในฐานะแอตทริบิวต์ HTML คือสตริงรหัส JS ซึ่งเป็นร่างกายของฟังก์ชั่นการประมวลผลและไม่มี {} หมายเหตุ: พยายามอย่าลงทะเบียนกิจกรรมบนแท็ก HTML อื่น ๆ มันละเมิดหลักการของการแยกรหัส HTML และ JavaScript หากฟังก์ชั่นเหตุการณ์อาจคลิกที่องค์ประกอบวัตถุเหตุการณ์ก่อนที่จะโหลดสิ่งนี้จะทำให้เกิดข้อผิดพลาด
2. ลงทะเบียนเป็นแอตทริบิวต์ขององค์ประกอบ DOM (มันจะถูกเรียกใช้ในขั้นตอนฟองเท่านั้น) ในเวลานี้ชื่อของแอตทริบิวต์ตัวจัดการเหตุการณ์จะต้องนำหน้าด้วย 'on' วิธีนี้เข้ากันได้กับเบราว์เซอร์ทั้งหมด ข้อเสียเพียงอย่างเดียวคือสามารถลงทะเบียนฟังก์ชั่นตัวจัดการเหตุการณ์เดียวเท่านั้น หากแอตทริบิวต์ onClick ถูกกำหนดสองครั้งคำจำกัดความหลังจะเขียนทับของก่อนหน้านี้ ตัวอย่างเช่น: window.onload = function () {... };
3. ในเบราว์เซอร์ทั้งหมดยกเว้น IE8 และเวอร์ชันก่อนหน้าการดำเนินงานเหตุการณ์ (การฟังและการเรียกทริกเกอร์) ของ DOM ถูกกำหนดไว้ในอินเทอร์เฟซ EventTarget อินเทอร์เฟซนี้ถูกปรับใช้สำหรับโหนดองค์ประกอบโหนดเอกสารและวัตถุหน้าต่าง นอกจากนี้วัตถุในตัวของเบราว์เซอร์เช่น XMLHTTPREQUEST, Audionode, Audiocontext และอื่น ๆ ได้ปรับใช้อินเทอร์เฟซนี้ด้วย มีสามวิธีของอินเทอร์เฟซนี้ addeventListener และ removeVentListener ใช้เพื่อผูกและลบฟังก์ชั่นฟังและใช้ DispatcheVent เพื่อเรียกเหตุการณ์
วิธี AddEventListener (type, Listener, Boolean) ใช้ในการลงทะเบียนผู้ฟัง พารามิเตอร์ที่สามตั้งค่าวิธีการแพร่กระจายเหตุการณ์ โดยปกติแล้วค่าเริ่มต้นจะใช้ค่าเริ่มต้นซึ่งหมายความว่าฟังก์ชั่นการฟังจะถูกทริกเกอร์เฉพาะในขั้นตอนฟอง (pupple) เมื่อตั้งค่าเป็นจริงหมายความว่าฟังก์ชั่นการฟังจะถูกกระตุ้นในขั้นตอนการจับภาพ (จับภาพ); ผู้ฟังหลายคนสามารถลงทะเบียนสำหรับเหตุการณ์ประเภทเดียวกันในวัตถุเดียวกันและผู้ฟังทั้งหมดจะถูกเรียกใช้ในลำดับการลงทะเบียน (การลงทะเบียนผู้ฟังซ้ำจะถูกละเว้นโดยเบราว์เซอร์);
หากคุณต้องการส่งผ่านพารามิเตอร์ไปยังฟังก์ชั่นการฟังคุณสามารถห่อฟังก์ชั่นการฟังด้วยฟังก์ชั่นที่ไม่ระบุชื่อเช่น Elm.addeventListener ('คลิก' ฟังก์ชั่น () {ฟัง ('อาร์กิวเมนต์จริง')} เท็จ);
เมื่อผู้ฟังที่ลงทะเบียนเป็นตัวแปรอ้างอิงกับฟังก์ชั่นคุณสามารถใช้ RemoveEventLestener (พิมพ์, ฟัง, บูลีน) เพื่อลบผู้ฟังในเป้าหมายเหตุการณ์ เหตุการณ์ฟองสบู่และการจับเหตุการณ์ในเหตุการณ์การฟังเดียวกันจะต้องถูกลบแยกต่างหากและทั้งสองไม่รบกวนกันและกัน
var div = document.getElementById ('div'); var listener = function (เหตุการณ์) { / * ทำอะไรที่นี่ * /}; div.addeventListener ('คลิก', ผู้ฟัง, เท็จ); Div.RemoveEventListener ('คลิก', ผู้ฟัง, เท็จ);เมธอด Dispatchevent (Event) จะกระตุ้นเหตุการณ์ที่ระบุด้วยตนเองบนโหนดปัจจุบันซึ่งจะกระตุ้นการดำเนินการของฟังก์ชั่นการฟัง วิธีนี้ส่งคืนค่าบูลีน ตราบใดที่ฟังก์ชั่นการฟังเรียกใช้เหตุการณ์ PreventDefault () มันจะส่งคืนเท็จ มิฉะนั้นจะเป็นจริง พารามิเตอร์เป็นอินสแตนซ์ของวัตถุเหตุการณ์ พารามิเตอร์ไม่สามารถว่างเปล่าและต้องเป็นวัตถุเหตุการณ์ที่ถูกต้องมิฉะนั้นจะมีการรายงานข้อผิดพลาด
btn.addeventListener ('คลิก', ผู้ฟัง, เท็จ);
var e = เหตุการณ์ใหม่ ('คลิก');
btn.Dispatchevent (e); // เหตุการณ์การคลิกจะถูกทริกเกอร์ใน BTN ทันทีและผู้ฟังจะถูกเรียกทันที
ตัวอย่างต่อไปนี้กำหนดว่าเหตุการณ์ถูกยกเลิกตามค่าการส่งคืนของวิธี DispatchedEvent หรือไม่
var ยกเลิก =! btn.dispatchevent (เหตุการณ์);
if (ยกเลิก) {console.log ('เหตุการณ์ยกเลิก'); -
else {console.log ('เหตุการณ์ไม่ได้ยกเลิก'); -
4. IE8 และเวอร์ชันก่อนหน้ารองรับสิ่งที่แนบมา (ประเภทผู้ฟัง) และ detachevent (type, Listener) การใช้งานและ addeventListener ของพวกเขาแตกต่างกัน: มีเพียงสองพารามิเตอร์ ข. ประเภทพารามิเตอร์จะต้องนำหน้าด้วย 'on'; ค. จะช่วยให้การลงทะเบียนซ้ำของเหตุการณ์การฟังเดียวกันและจะถูกเรียก; d. มีข้อเสียในการใช้วิธีการที่แนบมาซึ่งเป็นค่าของสิ่งนี้จะกลายเป็นวัตถุหน้าต่างแทนที่จะเป็นองค์ประกอบที่กระตุ้นเหตุการณ์
ปัญหาการสั่งซื้อการโทร: 1) ตัวจัดการที่ลงทะเบียนโดยการตั้งค่าคุณสมบัติวัตถุหรือแอตทริบิวต์ HTML จะเรียกว่าก่อนเสมอ
2). ตัวจัดการที่ลงทะเบียนกับ AddEventListener ถูกเรียกในคำสั่งการลงทะเบียนของพวกเขา
3). ตัวจัดการที่ลงทะเบียนกับสิ่งที่แนบมาในมรดกเช่นอาจถูกเรียกในลำดับใด ๆ
ปัญหาค่าส่งคืน:
1). ค่าส่งคืนของตัวจัดการเหตุการณ์มีความหมายเฉพาะกับตัวจัดการที่ลงทะเบียนผ่านแอตทริบิวต์ การลงทะเบียนค่าส่งคืนของตัวจัดการเหตุการณ์โดยการตั้งค่าแอตทริบิวต์วัตถุหรือแอตทริบิวต์ HTML เป็นเท็จคือการบอกเบราว์เซอร์ว่าจะไม่ดำเนินการเริ่มต้นที่เกี่ยวข้องกับเหตุการณ์นี้ เมื่อเบราว์เซอร์ต้องการข้ามไปยังหน้าใหม่เหตุการณ์ onbeforeunload ของวัตถุหน้าต่างจะถูกเรียกใช้ หากค่าส่งคืนเป็นสตริงมันจะปรากฏในกล่องโต้ตอบการยืนยันการสืบค้น
2) .AddeventListener () หรือ attaineVent () ลงทะเบียนตัวจัดการเหตุการณ์ ในการยกเลิกการดำเนินการเริ่มต้นของเบราว์เซอร์คุณต้องเรียกเมธอด preventDefault () หรือตั้งค่าคุณสมบัติ returnValue ของวัตถุเหตุการณ์
สิ่งนี้ชี้ไปที่ปัญหา:
1). ฟังก์ชั่นการฟังที่ระบุโดยเมธอด addeventListener, ภายในวัตถุนี้มักจะชี้ไปที่โหนดที่ทริกเกอร์เหตุการณ์;
2). ฟังก์ชั่นตัวจัดการเหตุการณ์นี้ลงทะเบียนโดย IE8 และวิธีการที่แนบมาก่อนหน้านี้ชี้ไปที่วัตถุทั่วโลก
วัตถุทั้งหมดนี้เขียนด้วยวิธีต่อไปนี้ชี้ไปที่โหนดองค์ประกอบ
element.onclick = พิมพ์;
element.addeventListener ('คลิก', พิมพ์, false)
element.onclick = function () {console.log (this.id);}
<Element OnClick = "console.log (this.id)">
วัตถุนี้ในวิธีต่อไปนี้ชี้ไปที่วัตถุทั่วโลก
element.onclick = function () {dosomething ()};
element.setAttribute ('onclick', 'dosomething ()');
<Element OnClick = "Dosomething ()">
element.attachevent ('onclick', dosomething) // ie8
ปัญหาหน่วยความจำ: สำหรับรหัสต่อไปนี้จะมีการสร้างฟังก์ชั่นนิรนามใหม่ในแต่ละลูปและหน่วยความจำจะถูกใช้มากขึ้นเรื่อย ๆ เนื่องจากไม่ได้ถูกเก็บไว้ในการอ้างอิงถึงฟังก์ชั่นที่ไม่ระบุชื่อจึงไม่สามารถเรียกได้ว่า removeVentListener; ดังนั้นผู้ฟังพารามิเตอร์ที่สองควรถูกเก็บไว้เป็นการอ้างอิงถึงฟังก์ชั่นเหตุการณ์การประมวลผล
สำหรับ (i = 0; i <els.length; i ++) {els [i] .addeventListener ("คลิก", ฟังก์ชั่น (e) {/*ทำอะไรบางอย่าง*/}, false}); -ฟังก์ชั่นเครื่องมืออเนกประสงค์ทั่วไปที่เข้ากันได้กับ IE เก่ากว่า:
ตรวจสอบให้แน่ใจว่าฟังก์ชั่นเครื่องมือนี้เป็นส่วนเสริมของตัวจัดการเหตุการณ์ไปยังวัตถุเป้าหมายของเหตุการณ์
ฟังก์ชั่น addevent (target, type, func) {ถ้า (target.addeventListener) {target.addeventListener (type, func, false); } else {target.attachevent ('on'+type, function (e) {// ฟังก์ชั่นการประมวลผลที่ลงทะเบียนโดย attaineVent ที่นี่ไม่ผูกพันกับการอ้างอิงดังนั้นจึงเป็นไปไม่ได้ที่จะใช้ detachevent เพื่อลบ func.call (เป้าหมาย, e);}); -ตัวจัดการเหตุการณ์ทั่วไป (เนื่องจาก IE8 และเวอร์ชันก่อนหน้าตัวจัดการในสถานที่เป็นหน้าต่างเป้าหมายความต้องการของเหตุการณ์ที่จะได้รับวัตถุเหตุการณ์และวัตถุโหนดเป้าหมายที่ทริกเกอร์เหตุการณ์ได้รับผ่านคุณสมบัติกิจกรรมการฝึกฝน)
ฟังก์ชั่น func (เหตุการณ์) {var event = event || window.event; var target = event.target || เหตุการณ์. //. handler code}4. การแพร่กระจายเหตุการณ์: เป็นกระบวนการที่เบราว์เซอร์ตัดสินใจว่าวัตถุใดที่กระตุ้นตัวจัดการเหตุการณ์
โฟลว์เหตุการณ์ที่ระบุไว้ใน "เหตุการณ์ระดับ DOM2" รวมถึงสามขั้นตอน: การจับเหตุการณ์เวที ==> ในระยะเป้าหมาย ==> ขั้นตอนฟองเหตุการณ์ สิ่งแรกที่เกิดขึ้นคือขั้นตอนการจับเหตุการณ์ (การแพร่กระจายจากชั้นนอกไปยังเลเยอร์ด้านใน) ซึ่งให้โอกาสสำหรับโหนดทั้งหมดที่เหตุการณ์ผ่านไปยังเหตุการณ์สกัดกั้น จากนั้นมีเหตุการณ์การรับเป้าหมายจริง (ดำเนินการในลำดับการลงทะเบียน) ขั้นตอนสุดท้ายคือเวทีเดือด (เดือดจากชั้นในไปยังชั้นนอก)
เมื่อองค์ประกอบคอนเทนเนอร์และองค์ประกอบที่ซ้อนกันนั่นคือเมื่อตัวจัดการเหตุการณ์ถูกเรียกในขั้นตอนการจับภาพและในขั้นตอนฟอง: เหตุการณ์ดำเนินการตัวจัดการเหตุการณ์ตามลำดับของกระแสเหตุการณ์ DOM และเมื่อเหตุการณ์อยู่ในขั้นตอนเป้าหมายลำดับของการโทรเหตุการณ์จะถูกกำหนดโดยลำดับการเขียนของเหตุการณ์ที่มีผลผูกพัน
หากคุณต้องการให้เหตุการณ์ไปถึงโหนดที่แน่นอนและไม่เผยแพร่อีกต่อไปมีสองวิธี:
1. ใช้กิจกรรม stoppropagation () ของวัตถุเหตุการณ์เพื่อป้องกันการแพร่กระจายของฟังก์ชั่นการฟังปัจจุบัน
2. ใช้กิจกรรม stopimmediatepropagation () ของวัตถุเหตุการณ์เพื่อป้องกันการแพร่กระจายของฟังก์ชั่นการฟังทั้งหมดของเหตุการณ์ปัจจุบันบนวัตถุเหตุการณ์
การมอบหมายงาน: เนื่องจากเหตุการณ์จะแพร่กระจายขึ้นไปยังโหนดพาเรนต์ในเวทีฟองฟังก์ชั่นการฟังของโหนดลูกสามารถกำหนดได้บนโหนดพาเรนต์และฟังก์ชั่นการฟังของโหนดพาเรนต์สามารถจัดการเหตุการณ์ขององค์ประกอบเด็กหลายองค์ประกอบได้อย่างสม่ำเสมอ
5. วัตถุเหตุการณ์ (เหตุการณ์): หลังจากเหตุการณ์เกิดขึ้นวัตถุเหตุการณ์จะถูกสร้างและส่งผ่านเป็นพารามิเตอร์ไปยังฟังก์ชั่นการฟัง เบราว์เซอร์จัดให้มีวัตถุเหตุการณ์และเหตุการณ์ทั้งหมดเป็นอินสแตนซ์ของวัตถุนี้หรือสืบทอดวัตถุเหตุการณ์ prototype วัตถุเหตุการณ์เองเป็นตัวสร้างที่สามารถใช้ในการสร้างอินสแตนซ์ใหม่
var ev = เหตุการณ์ใหม่ ("look", {"bubbles": จริง, "ยกเลิกได้": false});
Document.dispatchevent (EV);
ตัวสร้างเหตุการณ์ยอมรับพารามิเตอร์สองตัว พารามิเตอร์แรกคือสตริงที่ระบุชื่อของเหตุการณ์ พารามิเตอร์ที่สองคือวัตถุที่ระบุการกำหนดค่าของวัตถุเหตุการณ์ พารามิเตอร์นี้สามารถมีคุณสมบัติสองประการต่อไปนี้
Bubbles: ค่าบูลีน, เป็นตัวเลือก, ค่าเริ่มต้นเป็นเท็จแสดงว่าวัตถุเหตุการณ์เป็นฟองหรือไม่
ยกเลิกได้: ค่าบูลีนตัวเลือกค่าเริ่มต้นเป็นเท็จซึ่งระบุว่าสามารถยกเลิกเหตุการณ์ได้หรือไม่
คุณสมบัติของวัตถุเหตุการณ์:
1. เกี่ยวข้องกับขั้นตอนของเหตุการณ์:
Bubbles: คุณสมบัติแบบอ่านอย่างเดียวส่งคืนค่าบูลีนซึ่งระบุว่าเหตุการณ์ปัจจุบันจะเป็นฟองหรือไม่ ฟังก์ชั่นที่แตกต่างกันสามารถเรียกขึ้นอยู่กับว่าเหตุการณ์จะฟองหรือไม่
EventPhase: ส่งคืนค่าจำนวนเต็ม (หนึ่งใน 0,1,2,3) ซึ่งระบุสถานะปัจจุบันของเหตุการณ์
<0 เหตุการณ์ยังไม่เกิดขึ้น
<1 เหตุการณ์อยู่ในขั้นตอนการจับภาพนั่นคือมันอยู่ในกระบวนการของการแพร่กระจายจากโหนดบรรพบุรุษไปยังโหนดเป้าหมาย กระบวนการนี้มาจากวัตถุหน้าต่างไปยังโหนดเอกสารจากนั้นไปยังโหนด htmlhtmlelement จนกระทั่งโหนดพาเรนต์ของโหนดเป้าหมาย
<2 เหตุการณ์ถึงโหนดเป้าหมายนั่นคือโหนดที่ชี้ไปที่แอตทริบิวต์เป้าหมาย
<3 เหตุการณ์อยู่ในช่วงฟองสบู่นั่นคือในกระบวนการเผยแพร่ด้านหลังจากโหนดเป้าหมายไปยังโหนดบรรพบุรุษ กระบวนการนี้มาจากโหนดพาเรนต์ไปจนถึงวัตถุหน้าต่าง ขั้นตอนนี้สามารถเกิดขึ้นได้หากแอตทริบิวต์ Bubbles เป็นจริง
2. เกี่ยวข้องกับพฤติกรรมเริ่มต้นของเหตุการณ์:
ยกเลิกได้: ส่งคืนค่าบูลีนที่ระบุว่าสามารถยกเลิกเหตุการณ์ได้หรือไม่ หากคุณต้องการยกเลิกกิจกรรมคุณต้องโทรหาวิธี PreventDefault ในเหตุการณ์นี้
defaultprevented: ส่งคืนค่าบูลีนระบุว่ามีการเรียกใช้วิธี preventDefault หรือไม่
3. เกี่ยวข้องกับโหนดเป้าหมายของเหตุการณ์:
CurrentTarget: ส่งคืนโหนดที่ถูกผูกไว้กับฟังก์ชั่นการฟังของการดำเนินการเหตุการณ์
เป้าหมาย: ส่งคืนโหนดที่ทริกเกอร์เหตุการณ์ ใน IE6-IE8 ชื่อของทรัพย์สินนี้ไม่ใช่เป้าหมาย แต่เป็น srcelement
4. เกี่ยวข้องกับข้อมูลอื่น ๆ เกี่ยวกับวัตถุเหตุการณ์:
ประเภท: ส่งคืนสตริงที่แสดงถึงประเภทเหตุการณ์
รายละเอียด: ส่งคืนค่าตัวเลขที่แสดงถึงข้อมูลบางอย่างเกี่ยวกับเหตุการณ์ ความหมายเฉพาะเกี่ยวข้องกับประเภทเหตุการณ์ สำหรับเหตุการณ์เมาส์หมายถึงจำนวนครั้งที่ปุ่มเมาส์ถูกกดที่ตำแหน่งที่แน่นอน ตัวอย่างเช่นสำหรับเหตุการณ์ dblclick ค่าของแอตทริบิวต์รายละเอียดคือ 2 เสมอ
การประทับเวลา: ส่งคืนการประทับเวลามิลลิวินาทีซึ่งบ่งบอกถึงเวลาที่เกิดเหตุการณ์ การคำนวณเริ่มต้นจาก performancetiming.navigationstart ซึ่งหมายถึงเวลาที่ผู้ใช้ใช้ในการนำทางไปยังหน้าเว็บ หากคุณต้องการแปลงค่านี้เป็นเวลา UNIX EPOCH TIMESTAMP คุณต้องคำนวณ Event.timestamp + Performance.timing.navigationStart
Istrusted: ส่งคืนค่าบูลีนที่ระบุว่าเหตุการณ์นั้นน่าเชื่อถือหรือไม่ ไม่ค่อยมีประโยชน์การรองรับเบราว์เซอร์ที่แตกต่างกันนั้นแตกต่างกัน
วิธีการของวัตถุเหตุการณ์:
PreventDefault (): ยกเลิกพฤติกรรมเริ่มต้นของเบราว์เซอร์สำหรับเหตุการณ์ปัจจุบัน หลักฐานสำหรับวิธีนี้ที่จะมีผลคือคุณสมบัติที่ยกเลิกได้ของเหตุการณ์เป็นจริง หากเท็จการเรียกวิธีนี้ไม่มีผล
stoppropagation (): ยุติเหตุการณ์เพื่อเผยแพร่ต่อไปในระหว่างการจับกุมการประมวลผลเป้าหมายหรือขั้นตอนฟองของกระบวนการแพร่กระจาย หลังจากเรียกใช้วิธีนี้ตัวจัดการบนโหนดที่จัดการเหตุการณ์จะถูกเรียกและเหตุการณ์จะไม่ถูกส่งไปยังโหนดอื่นอีกต่อไป หมายเหตุ: วิธีนี้ไม่สามารถป้องกันการจัดการเหตุการณ์อื่น ๆ บนโหนดเอกสารเดียวกันจากการถูกเรียก แต่สามารถป้องกันไม่ให้เหตุการณ์ถูกส่งไปยังโหนดอื่น
StopimmediatePropagation (): ป้องกันไม่ให้ฟังก์ชั่นการฟังอื่น ๆ ถูกเรียกในเหตุการณ์เดียวกัน ตราบใดที่หนึ่งในฟังก์ชั่นการฟังเรียกวิธีการฟังก์ชั่นการฟังอื่น ๆ จะไม่ถูกเรียกใช้อีกครั้ง
ลิงค์อ้างอิง:
http://javascript.ruanyifeng.com/dom/event.html#toc31
https://developer.mozilla.org/zh-cn/docs/web/api
คู่มือ JavaScript ที่มีสิทธิ์ 6th Edition
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น