Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 放弃一个函数或.js文件及其";“影响”;_Javascript_Jquery_Html_Ajax - Fatal编程技术网

Javascript 放弃一个函数或.js文件及其";“影响”;

Javascript 放弃一个函数或.js文件及其";“影响”;,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我正在使用AJAX来更改页面的内容,因此每个页面都有自己的函数和.js文件 因此,图形插件仅在页面上有图形的情况下加载,但这些插件看起来会一直保留到刷新,这会在内容更改且页面上不再有图形时导致错误 我将这段代码用于我的AJAX调用(我认为它会丢弃函数和加载的插件,但现在看起来好像没有): 现在的问题是(不仅仅是这个图形插件),如果一个页面加载raphael.js(一个插件)并绘制一些图形,那么当内容改变并且没有图形时,我调整浏览器的大小会给我一系列错误,这些错误与没有图形的事实有关(或它们的容器

我正在使用AJAX来更改页面的内容,因此每个页面都有自己的函数和.js文件

因此,图形插件仅在页面上有图形的情况下加载,但这些插件看起来会一直保留到刷新,这会在内容更改且页面上不再有图形时导致错误

我将这段代码用于我的AJAX调用(我认为它会丢弃函数和加载的插件,但现在看起来好像没有):

现在的问题是(不仅仅是这个图形插件),如果一个页面加载raphael.js(一个插件)并绘制一些图形,那么当内容改变并且没有图形时,我调整浏览器的大小会给我一系列错误,这些错误与没有图形的事实有关(或它们的容器div),但由于插件和函数已加载,它仍尝试绘制它们。 (编辑插件不是一个好主意,因为它是一个模板,我有6到7个插件)

TL;DR
是否有一种方法可以丢弃插件和某些函数,从而取消它们调用的所有其他事件(它停止尝试绘制这些图形)?

currentScripts.remove();
只删除
脚本
标记,而不删除此标记加载/执行的脚本。脚本在内存中的保留时间至少与没有引用它们的时间一样长。因此,您需要为每个插件添加一个清理功能,如果您卸载它们,这些插件必须由您调用。@t.niese这就是我正在搜索的内容r、 你能把我链接到这样一个清理功能吗?我搜索了两天,没有看到任何有用的东西…有很多方法可以解决这个问题,这在很大程度上取决于你的项目结构、你如何加载/管理你的脚本以及你如何组织你的代码。最好的方法可能是使用一个支持
req的加载程序uire
语法,如webpack或requirejs,使用
currentPlugin=require('plugin-name');currentPlugin.init();
加载您的插件,并使用
currentPlugin.cleanup()清理插件(如果已设置)
仅仅删除函数是不够的。如果脚本设置了事件处理程序,那么所有这些都需要删除。您需要设计动态页面,以便加载的每个东西都知道如何清理自己。没有内置的工具可以做到这一点。这可能会有所帮助:
$.get(urlPath, function(html) {
    var doc = $(html);
    var currentScripts = $('.current-scripts'); // this is the div with plugins and functions for a specific page
    currentScripts.remove();
    currentScripts = undefined;
    $('.content').empty().css('opacity', '0').append(doc.children('.content >*'));
    $('.scripts').append(doc.children('.current-scripts'));
    ... // some more not related stuff
};