tl; dr : Hayır, bunu yerel olarak desteklenen herhangi bir şekilde yapamazsınız.
Bunu başarmanın tek yolu, eklenen dinleyicilerin bir kaydını tuttuğunuz özel bir depolama nesnesi oluşturmaktır. Aşağıdaki satırlarda bir şey:
var CustomEventStorage = [];
Adım 1: Öncelikle, depolama nesnesini geçebilecek ve öğeye (veya yanlış) verilen bir öğenin kaydını döndürebilecek bir işleve ihtiyacınız olacak.
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;
}
Adım 2: Daha sonra, bir olay dinleyicisi ekleyebilen ancak aynı zamanda dinleyiciyi depolama nesnesine ekleyebilen bir işleve ihtiyacınız olacaktır.
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);
}
Adım 3: Sorunuzun gerçek gereksinimi ile ilgili olarak, bir öğenin belirli bir olay için bir olay dinleyicisi eklenip eklenmediğini kontrol etmek için aşağıdaki işleve ihtiyacınız olacaktır.
function listenerExists (element, event, listener) {
var record = findRecordByElement(element);
if (record && event in record.listeners) {
return !!~record.listeners[event].indexOf(listener);
}
return false;
}
Adım 4: Son olarak, bir dinleyiciyi depolama nesnesinden silebilecek bir işleve ihtiyacınız olacak.
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);
}
Snippet:
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'nin soruyu yayınlamasının üzerinden 5 yıldan fazla zaman geçmiş olmasına rağmen, gelecekte bu soruyla karşılaşan kişilerin bu yanıttan yararlanacağına inanıyorum, bu nedenle ona önerilerde bulunmaktan veya iyileştirmeler yapmaktan çekinmeyin. 😊