gpt4 book ai didi

javascript - 事件和 DOM 元素

转载 作者:数据小太阳 更新时间:2023-10-29 03:57:19 26 4
gpt4 key购买 nike

假设我有一个包含两列布局的页面,其中左列是一组链接,单击该链接时它会在右列中加载关联的 html 页面/模板。

加载模板后,有一个模板处理程序通过 requirejs 初始化为单例,它定义了一些方法和处理程序,例如:

SomePage.prototype.saveHandler: function(e) { ... }; // Page handler has a handler

SomePage.prototype.initialize: function() {
$('#btnSave').on('click', saveHandler);
}

然后,我在每次加载页面时通过初始化方法附加 DOM 事件。

SomePage.initialize(); // This attaches the click event

现在,当我单击左侧的另一个链接时,会加载一个不同的模板页面,并为该页面重复上述过程。

我想知道之前附加到 btnSave 元素的点击事件发生了什么?它现在是 jQuery 缓存中的悬空事件处理程序吗?

如果我在同一页面再次加载时尝试删除它,它是否真的会删除原始事件?

$('#btnSave').off('click', saveHandler);

执行以下 block 是否可以防止内存泄漏/悬挂引用?

// The potential problem here is that btnSave is part of the newly loaded template 
// and not the element i attached the handler to earlier (which doesn't exist anymore)
$('#btnSave').off('click', saveHandler);

$('#btnSave').on('click', saveHandler);

确保我不会遇到悬空引用和内存泄漏的最佳方法是什么。这也是纯 JavaScript 的一个潜在问题。我的理解是,刷新模板页面时,上述内容将不起作用。与此同时,我将对其进行试验,但很高兴知道专家们是如何处理这个问题的。

最佳答案

看看这张来自 javascript 大师 Andy Osmani 的幻灯片。你会在这里找到关于内存泄漏和循环引用的答案: https://speakerdeck.com/addyosmani/javascript-memory-management-masterclass

关于javascript - 事件和 DOM 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25611540/

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