gpt4 book ai didi

javascript - 查询。删除委托(delegate)事件的所有监听器

转载 作者:搜寻专家 更新时间:2023-11-01 05:05:18 24 4
gpt4 key购买 nike

我有一些容器。他们有一些委托(delegate)的事件监听器。

像这样

$('body').on('click', '.container .button', function() { ... });

我想从容器中的所有元素(无论事件类型和选择器)中删除所有监听器。

像这样

 $( "body" ).off("*", ".container *");

但它不起作用。

有人可以帮忙吗?提前感谢您的帮助。

最佳答案

更新的答案:

在评论中,你说:

Ok. I have a jsfiddle to explain the issue. http://jsfiddle.net/KT42n/3 I want to remove all handlers from all elements IN THE CONTAINER

unfortunately in my case using of namespace is impossible

哎呀。这将使它变得非常困难,尤其是因为一些委托(delegate)处理程序可能与容器内外的元素相关。

唯一想到的是列出您要阻止的所有事件名称(没有那么多):

$(".container").on("click mousedown mouseup etc.", false);

这将在事件到达 body 之前停止该事件,因此在委托(delegate)处理程序看到它之前:Live Example

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<meta charset=utf-8 />
<title>Stop Delegated Handlers Within Container</title>
</head>
<body>
<p>Outside the container</p>
<div class="container">
<p>Inside the container</p>
</div>
<script>
(function() {
// Other handlers
$("body").on("click", "p", function() {
display("paragraph clicked");
});

// Prevent clicks within container
$(".container").on("click mousedown etc", false);

function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
})();
</script>
</body>
</html>

原始答案:

您可以像这样从 body 中删除所有 处理程序:

$("body").off();

这包括委托(delegate)的。

如果你想保留一些处理程序而不保留其他处理程序,我能想到的最简单的方法是在连接事件时命名事件,例如:

$("body").on("click.foo", "selector", ...);

...等等。然后你可以使用命名空间来删除​​所有这些:

$("body").off(".foo", "selector");

...甚至只是

$("body").off(".foo");

...完全删除所有命名空间的,而不仅仅是该选择器的那些。

示例:Live Copy

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<meta charset=utf-8 />
<title>Removing All Delegated Handlers</title>
</head>
<body>
<div class="clickable">Click me</div>
<div class="mousemoveable">Mouse over me</div>
<input type="button" id="theButton" value="Remove handlers">
<script>
(function() {
$("body").on("click.foo", ".clickable", function() {
display("click");
});
$("body").on("mousemove.foo", ".mousemoveable", function() {
display("mousemove");
});
$("#theButton").click(function() {
$("body").off(".foo");
});
function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
})();
</script>
</body>
</html>

关于javascript - 查询。删除委托(delegate)事件的所有监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22379827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com