Javascript 如何加载/卸载动态加载的部分页面调用的JS?
我使用jQuery和history.js来管理部分页面之间的动态转换;这样可以避免重新加载整个文档。这些部分页面中的一些调用自己独特的javascript文件。虽然页面之间的转换工作正常,但在调用它的部分页面被动态替换后,已执行javascript的剩余部分仍然处于活动状态 如何卸载通过动态页面加载引入的javascript,然后被另一个页面异步替换?Javascript 如何加载/卸载动态加载的部分页面调用的JS?,javascript,jquery,ajax,history.js,Javascript,Jquery,Ajax,History.js,我使用jQuery和history.js来管理部分页面之间的动态转换;这样可以避免重新加载整个文档。这些部分页面中的一些调用自己独特的javascript文件。虽然页面之间的转换工作正常,但在调用它的部分页面被动态替换后,已执行javascript的剩余部分仍然处于活动状态 如何卸载通过动态页面加载引入的javascript,然后被另一个页面异步替换? 更精细的细节 主模板 我的主模板(用于所有页面)可以看作是一个简单的: <html> <head> <scrip
更精细的细节 主模板 我的主模板(用于所有页面)可以看作是一个简单的:
<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的工作感觉很混乱;但就我个人而言,我找不到任何关于最佳实践的建议
不幸的是,我不知道加载部分页面的任何正确方法,但我希望它能对您有所帮助(:首先…一旦加载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)