jQuery ไม่ได้ให้คุณเพียงแค่เข้าถึงกิจกรรมสำหรับองค์ประกอบที่กำหนด คุณสามารถเข้าถึงได้โดยใช้วิธีการภายในที่ไม่มีเอกสาร
$._data(element, "events")
แต่มันจะไม่ให้เหตุการณ์ทั้งหมดแก่คุณเพื่อความแม่นยำจะไม่แสดงกิจกรรมที่คุณมอบหมาย
$([selector|element]).on()
เหตุการณ์เหล่านี้ถูกเก็บไว้ในเอกสารดังนั้นคุณสามารถดึงข้อมูลได้โดยการเรียกดู
$._data(document, "events")
แต่นั่นเป็นงานที่ยากเนื่องจากมีกิจกรรมสำหรับหน้าเว็บทั้งหมด
Tom G ด้านบนสร้างฟังก์ชันที่กรองเอกสารสำหรับเหตุการณ์เฉพาะขององค์ประกอบที่กำหนดและผสานเอาท์พุทของทั้งสองวิธี แต่มีข้อบกพร่องของการทำซ้ำเหตุการณ์ในผลลัพธ์ (และมีประสิทธิภาพในรายการเหตุการณ์ภายใน jQuery องค์ประกอบขององค์ประกอบ ฉันแก้ไขข้อบกพร่องนั้นแล้วคุณจะพบรหัสด้านล่าง เพียงแค่วางลงในคอนโซล dev ของคุณหรือลงในรหัสแอปของคุณและดำเนินการเมื่อจำเป็นเพื่อรับรายการกิจกรรมทั้งหมดสำหรับองค์ประกอบที่กำหนด
สิ่งสำคัญคือการสังเกตองค์ประกอบเป็นจริง HTMLElement ไม่ใช่วัตถุ jQuery
function getEvents(element) {
var elemEvents = $._data(element, "events");
var allDocEvnts = $._data(document, "events");
function equalEvents(evt1, evt2)
{
return evt1.guid === evt2.guid;
}
for(var evntType in allDocEvnts) {
if(allDocEvnts.hasOwnProperty(evntType)) {
var evts = allDocEvnts[evntType];
for(var i = 0; i < evts.length; i++) {
if($(element).is(evts[i].selector)) {
if(elemEvents == null) {
elemEvents = {};
}
if(!elemEvents.hasOwnProperty(evntType)) {
elemEvents[evntType] = [];
}
if(!elemEvents[evntType].some(function(evt) { return equalEvents(evt, evts[i]); })) {
elemEvents[evntType].push(evts[i]);
}
}
}
}
}
return elemEvents;
}