เป็นไปได้ไหมที่จะรับรายการเหตุการณ์ที่เชื่อมโยงกับองค์ประกอบใน jQuery?

ตามที่คำถามกล่าวไว้ ฉันต้องการรายการเหตุการณ์ที่เชื่อมโยงกับองค์ประกอบเฉพาะ

ฉันหมายถึงเหตุการณ์เช่นการคลิก การวางเมาส์ ฯลฯ ที่เชื่อมโยงกับองค์ประกอบนั้นขณะโหลด dom

(โง่) ตัวอย่าง:

$("#element").click(function()
{
    //stuff
});
$("#element").mouseover(function()
{
    //stuff
});
$("#element").focus(function()
{
    //stuff
});

ผลลัพธ์:

คลิก เลื่อนเมาส์ โฟกัส


person apelliciari    schedule 13.11.2009    source แหล่งที่มา
comment
คุณกำลังพยายามแก้ไขจุดบกพร่องหรือจัดการโซลูชันที่ปรับใช้หรือไม่   -  person Mark Schultheiss    schedule 13.11.2009


คำตอบ (2)


ทุกเหตุการณ์จะถูกเพิ่มเข้าไปในอาร์เรย์

อาร์เรย์นี้สามารถเข้าถึงได้โดยใช้วิธีการข้อมูล jQuery:

$("#element").data('events')

หากต้องการบันทึกเหตุการณ์ทั้งหมดของวัตถุหนึ่งไปยัง fireBug เพียงพิมพ์:

console.log ( $("#element").data('events') )

และคุณจะได้รับรายการกิจกรรมที่ถูกผูกไว้ทั้งหมด


อัปเดต:

สำหรับ jQuery 1.8 และสูงกว่า คุณต้องดูวัตถุข้อมูล jQuery ภายใน:

$("#element").each(function(){console.log($._data(this).events);});
// or
console.log($._data($("#element")[0]).events);
person jantimon    schedule 13.11.2009
comment
สำหรับหมายเหตุสำหรับผู้เยี่ยมชมใหม่: คำตอบนี้ล้าสมัยตั้งแต่ jQuery เวอร์ชัน 1.8: .data(“events”): jQuery เก็บข้อมูลที่เกี่ยวข้องกับเหตุการณ์ไว้ในวัตถุข้อมูลชื่อ (รอ) เหตุการณ์ในแต่ละองค์ประกอบ นี่คือโครงสร้างข้อมูลภายใน ดังนั้นใน 1.8 สิ่งนี้จะถูกลบออกจากพื้นที่ชื่อข้อมูลผู้ใช้ ดังนั้นจึงจะไม่ขัดแย้งกับรายการที่มีชื่อเดียวกัน […]. ดูเพิ่มเติม: jQuery 1.8 ค้นหาตัวจัดการเหตุการณ์ - person insertusernamehere; 04.10.2013
comment
ขอบคุณ - ฉันเพิ่มบันทึก :) - person jantimon; 04.10.2013

คุณสามารถเข้าถึงได้ภายใน element.data('events'); ตัวอย่าง:

var events = element.data('events');
for (var type in events) {
    // `type` is "click", "mouseover", "change", etc.
    for (var handler in events[type]) {
        // `handler` is the associated function.
    }
}
person BalusC    schedule 13.11.2009