gpt4 book ai didi

jquery - jquery off/unbind 等是否递归地将所有事件分离到当前选择器和子级?

转载 作者:行者123 更新时间:2023-12-03 23:03:57 27 4
gpt4 key购买 nike

我正在创建一个网络应用程序,并且无论如何都会进行自己的测试来确认,但想知道是否有人在绑定(bind)/取消绑定(bind)等时有过这方面的经验。例如,我想首先销毁当前内容容器的事件和 child 的事件事件,然后在将新内容加载到 DIV 中时加载并附加基于远程脚本的新事件。我可以穿越,但我想如果它已经穿越了那就太好了。只要我将事件范围保持在内容 DIV 范围内,这种方法理论上就可以在降低复杂性方面进行扩展。

根据请求,我正在解释我所做的事情背后的目的。

我正在寻找创建一个可维护的 AJAX Web 应用程序。想象一下,您可以向其中添加数百个页面/脚本,并且当您请求新内容时,被调用者除了其 URL 之外不需要知道任何有关它的信息。这就是我的目的。我已经使用 iframe 覆盖完成了这项工作,并且效果很好,但是我对纯 AJAX 的主要担心是在不需要时在内存中留下的代码,例如事件和闭包引用等。 iframe 覆盖在这方面有其优势,无需太多考虑涉及那里,但每次加载新 URL 的速度较慢,并且如果您希望页面的某些部分比其他页面更新,则该方法不能很好地集成。

因此,我们的思考过程是创建一种方法,让父 DIV 通过 jQuery 加载方法注入(inject)新的 HTML。 load 方法对于执行其中的脚本也有很大的副作用。因此,如果我使用这种方法,我需要创建一个系统来执行此操作,该系统不会使浏览器膨胀并留下奇怪的事件行为等。这可能是另一个问题。

更新

在看到代表投票的弹出窗口后,我回答了我的问题。如果您使用事件冒泡方法在父级别附加事件,这实际上不是问题。请参阅下面我的回答。

最佳答案

我只是跟进,因为已经有一段时间了,而且我对这个问题有一个非常简单的解决方案。

如果您始终使用事件冒泡方法在父节点上附加事件,如下所示:

$('parentSelector')
.on('click', 'someDescendant', function(ev) {
// code
})
.on('focus', 'anotherDescendant', function(ev) {
// code
});

然后删除这些事件非常简单:

$('parentSelector').off();

因此,每当您加载小部件时,您始终可以安全地执行此操作:

$('parentSelector')
.off()
.on('click.my-widget', 'someDescendant', function(ev) {
// code
}).on('focus', 'anotherDescendant', function(ev) {
// code
});

如果使用这种方法,递归/选择器问题就不存在。

关于jquery - jquery off/unbind 等是否递归地将所有事件分离到当前选择器和子级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8903827/

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