Javascript 如果我只知道元素和事件,请删除事件侦听器

Javascript 如果我只知道元素和事件,请删除事件侦听器,javascript,Javascript,如果我只知道元素和事件,但不知道函数,有没有办法删除事件侦听器 比如: var foo = getElementById("foo"); foo.removeEventListener('click'); 纯JS方法 如果没有对事件侦听器方法的引用,则无法分离事件侦听器 需要指定listener 带修改的JS 可以使用如下某种自定义函数: function addEventListenerAndRemember(element, type, listener, useCapture) {

如果我只知道元素和事件,但不知道函数,有没有办法删除事件侦听器

比如:

var foo = getElementById("foo");
foo.removeEventListener('click');
纯JS方法 如果没有对事件侦听器方法的引用,则无法分离事件侦听器

需要指定
listener

带修改的JS 可以使用如下某种自定义函数:

function addEventListenerAndRemember(element, type, listener, useCapture)
{
    if (!element.myEvents) element.myEvents = {};
    if (!element.myEvents[type]) element.myEvents[type] = [];

    element.myEvents[type].push(listener);

    element.addEventListener(type, listener, useCapture || false);
}

function removeAllEventListener(element, type)
{
    element.myEvents.forEach(function() {
        element.myEvents[type].forEach(function(listener) {
            element.removeEventListener(type, listener);
        });
        element.myEvents[type] = [];
    });
}
我不确定这段代码是否有效——它只是一个演示该想法的示例。
您还可以将这些方法包装到
addEventListener
并覆盖默认行为。就像:

Element.prototype.addEventListenerBase = Element.prototype.addEventListener;
Element.prototype.addEventListener = function(type, listener, useCapture) {
    // do the same
};
jQuery方法 对我来说,使用jQuery库看起来是这里最清晰的解决方案

您可以通过以下方式附加事件:

$("#foo").on('click', function() {

});
并以简单的方式将其分离:

$("#foo").off('click');

你可以检查这个代码,希望对你有所帮助

<a href="#" id="mydiv">click</a>
<a href="#" onclick="removeHandler()">remove</a>

<script>
document.getElementById("mydiv").addEventListener("click", myFunction);

function myFunction() {
    alert('hello');
}

function removeHandler() {
    document.getElementById("mydiv").removeEventListener("click", myFunction);
}
</script>

我有同样的问题,并以不同的方式解决了它

$("#myelement").after($("#myelement")[0].outerHTML).remove()

抱歉,不清楚您在问什么…可以使用jQuery。然而,恕我直言,使用纯JS无法做到这一点。您必须使用自定义方法或包装
addEventListener
removeEventListener
或使用jQuery,这使您可以轻松地执行
$(“#foo”)。关闭('click')
。只有一个处理程序吗?@john1212我的意思是,使用jQuery
打开
和jQuery
关闭
。如果您使用纯JS附加此处理程序,那么如果没有对处理程序的引用,则无法删除此侦听器。@YeldarKurmangaliyev非常感谢,您揭示了我的实际问题。是的,问题是,它是通过纯JS添加的。你认为,谷歌搜索“从匿名函数中删除事件侦听器”这样的东西有什么帮助?这并没有回答问题,问题的关键是他想删除
myFunction
处理程序,但不知道它是什么。light saver。。。!
$("#myelement").after($("#myelement")[0].outerHTML).remove()