tl; dr : ไม่คุณไม่สามารถทำได้ด้วยวิธีใด ๆ ที่ได้รับการสนับสนุน
วิธีเดียวที่ฉันรู้เพื่อให้บรรลุสิ่งนี้คือการสร้างวัตถุจัดเก็บแบบกำหนดเองที่คุณเก็บบันทึกของผู้ฟังที่เพิ่มเข้ามา บางสิ่งตามบรรทัดต่อไปนี้:
var CustomEventStorage = [];
ขั้นตอนที่ 1:ขั้นแรกคุณจะต้องมีฟังก์ชันที่สามารถสำรวจวัตถุจัดเก็บข้อมูลและส่งคืนบันทึกขององค์ประกอบที่กำหนดองค์ประกอบ (หรือเท็จ)
function findRecordByElement (element) {
for (var index = 0, length = CustomEventStorage.length; index < length; index++) {
var record = CustomEventStorage[index];
if (element == record.element) {
return record;
}
}
return false;
}
ขั้นตอนที่ 2:จากนั้นคุณจะต้องมีฟังก์ชันที่สามารถเพิ่มตัวฟังเหตุการณ์ แต่ยังแทรกตัวฟังลงในวัตถุจัดเก็บ
function insertListener (element, event, listener, options) {
var record = findRecordByElement(element);
if (record) {
record.listeners[event] = record.listeners[event] || [];
}
else {
record = {
element: element,
listeners: {}
};
record.listeners[event] = [];
CustomEventStorage.push(record);
}
record.listeners[event].push(listener);
element.addEventListener(event, listener, options);
}
ขั้นตอนที่ 3:ตามความต้องการที่แท้จริงของคำถามของคุณคุณจะต้องใช้ฟังก์ชันต่อไปนี้เพื่อตรวจสอบว่ามีการเพิ่มองค์ประกอบหรือไม่ผู้ฟังเหตุการณ์สำหรับเหตุการณ์ที่ระบุหรือไม่
function listenerExists (element, event, listener) {
var record = findRecordByElement(element);
if (record && event in record.listeners) {
return !!~record.listeners[event].indexOf(listener);
}
return false;
}
ขั้นตอนที่ 4:สุดท้ายคุณจะต้องมีฟังก์ชันที่สามารถลบผู้ฟังออกจากวัตถุจัดเก็บ
function removeListener (element, event, listener, options) {
var record = findRecordByElement(element);
if (record && event in record.listeners) {
var index = record.listeners[event].indexOf(listener);
if (~index) {
record.listeners[event].splice(index, 1);
}
if (!record.listeners[event].length) {
delete record.listeners[event];
}
}
element.removeEventListener(event, listener, options);
}
ตัวอย่างข้อมูล:
window.onload = function () {
var
element = document.getElementById("test"),
listener = function (e) {
console.log(e.type + "triggered!");
};
insertListener(element, "mouseover", listener);
console.log(listenerExists(element, "mouseover", listener));
removeListener(element, "mouseover", listener);
console.log(listenerExists(element, "mouseover", listener));
};
<script src = "https://cdn.rawgit.com/angelpolitis/custom-event-storage/master/main.js"></script>
<div id = "test" style = "background:#000; height:50px; width: 50px"></div>
แม้ว่า OP จะโพสต์คำถามไปแล้วกว่า 5 ปี แต่ฉันเชื่อว่าคนที่สะดุดกับคำถามนี้ในอนาคตจะได้รับประโยชน์จากคำตอบนี้ดังนั้นอย่าลังเลที่จะให้ข้อเสนอแนะหรือการปรับปรุง 😊