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()