Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.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_Ajax_History.js - Fatal编程技术网

Javascript 如何加载/卸载动态加载的部分页面调用的JS?

Javascript 如何加载/卸载动态加载的部分页面调用的JS?,javascript,jquery,ajax,history.js,Javascript,Jquery,Ajax,History.js,我使用jQuery和history.js来管理部分页面之间的动态转换;这样可以避免重新加载整个文档。这些部分页面中的一些调用自己独特的javascript文件。虽然页面之间的转换工作正常,但在调用它的部分页面被动态替换后,已执行javascript的剩余部分仍然处于活动状态 如何卸载通过动态页面加载引入的javascript,然后被另一个页面异步替换? 更精细的细节 主模板 我的主模板(用于所有页面)可以看作是一个简单的: <html> <head> <scrip

我使用jQuery和history.js来管理部分页面之间的动态转换;这样可以避免重新加载整个文档。这些部分页面中的一些调用自己独特的javascript文件。虽然页面之间的转换工作正常,但在调用它的部分页面被动态替换后,已执行javascript的剩余部分仍然处于活动状态

如何卸载通过动态页面加载引入的javascript,然后被另一个页面异步替换?


更精细的细节 主模板 我的主模板(用于所有页面)可以看作是一个简单的:

<html>
<head>
<script>
    //scripts to manage asynchronous loading of partial-pages into #content div
</script>
</head>
<body>
    <div id="content"></div>
</body>
</html>
用户设置 在主模板的#contentdiv中加载的另一部分页面是用户的设置:

<script src="profile.js"></script>
<form>
    <input type="file" name="profile-picture">
</form>
<script src="settings.js"></script>
<form>
    <input type="text" name="first-name">
    <input type="text" name="last-name">
</form>
问题
  • 某些javascript函数在调用它们的部分页面被另一个页面替换后继续运行(例如,setInterval
  • 为每个部分页面加载新javascript的工作感觉很混乱;但就我个人而言,我找不到任何关于最佳实践的建议
在允许为每个部分页面使用特定于页面的脚本的同时,实现动态部分页面加载/卸载效果的更好方法是什么?

谢谢大家!

对于第一个问题:

问题是,在更换软件包后,哪些函数继续运行。您提到的SetInterval使用js定时器,简单地替换包不会自动停止定时器。 更换前,应清除通过setInterval启动的所有计时器

例如

只需在替换软件包之前调用uninitialize,它就可以工作了


不幸的是,我不知道加载部分页面的任何正确方法,但我希望它能对您有所帮助(:

首先…一旦加载javascript…您就无法卸载它

setInterval
问题需要使用
clearInterval

在初始化
setiInterval;
时,声明一些深奥的名称,使其作为全局变量具有相当的唯一性。请确保在
$(文档)之外声明
var
。使用它之前准备好了吗

var我的超级表单提交者

$(document.ready)function(){...
 my_super_form_submitter=setInterval(func.....
然后每当你加载一个新页面

if(my_super_form_submitter)
clearInterval(my_super_form_submitter)

至于与其他方法的冲突……您可以为页面特定的代码采用内容类协议。在每次页面加载时,更改内容div的类……然后在jQuery选择器中使用该类

按照下面的答案明确地清除间隔。我猜您要找的是卸载j的某种秘密方式从内存中删除脚本。我不知道有这样一个脚本。创建每页的“类实例化”,然后在完成后将它们的引用设置为null。这应该允许垃圾收集将它们从内存中删除。这类似于@charlie在其答案结尾处建议的内容。@JaredGotte很酷的主意!类似于var Settings=(function()…然后在加载到新页面时设置为空?我不能100%确定该语法是否实例化了任何内容。我仍在学习JavaScript。我想到了类似
var Settings=new ClassName的东西(…
然后跟踪您使用设置的位置。完成后,将所有设置的引用设置为null。我想
Settings=null
甚至可以工作。简单的解决方案;我喜欢!在选择器中使用内容类可以让我轻松地组合来自不同页面的js。您的想法是什么将所有js存储在一个网络请求中?这取决于应用程序的大小和js的大小。将一个文件和所有脚本与jQuery文件的大小进行比较,并基于此进行比较
$(function() {
    var timer = setInterval(function() {
        // auto-submit form every 10 seconds
        $('form').submit();
    }, 10000);
}

function uninitialize(){
    clearInterval(timer);
}
$(document.ready)function(){...
 my_super_form_submitter=setInterval(func.....
if(my_super_form_submitter)
clearInterval(my_super_form_submitter)