首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加载/卸载动态加载的部分页面调用的JS?

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

Stack Overflow用户
提问于 2013-11-01 00:50:01
回答 2查看 1.1K关注 0票数 2

我使用jQuery和history.js来管理部分页面之间的动态转换,从而避免重新加载整个文档。有些部分页面调用自己独特的javascript文件。虽然页面之间的转换工作良好,但是在调用它的部分页面被动态替换之后,执行的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>

用户配置文件

在# div中呈现的部分页面用于用户的配置文件

代码语言:javascript
复制
<script src="profile.js"></script>
<form>
    <input type="file" name="profile-picture">
</form>

profile.js的内容类似于:

代码语言:javascript
复制
$(function() {
    $('input').change(function() {
        // upload profile picture asynchronously
    });
});

用户设置

加载在主模板的#content div中的另一个部分页面是用户的设置

代码语言:javascript
复制
<script src="settings.js"></script>
<form>
    <input type="text" name="first-name">
    <input type="text" name="last-name">
</form>

settings.js的内容类似于:

代码语言:javascript
复制
$(function() {
    setInterval(function() {
        // auto-submit form every 10 seconds
        $('form').submit();
    }, 10000);
}
});

问题

  • 某些javascript函数继续运行(例如,调用它们的部分页面被另一个页面替换后的setInterval) )。
  • 为每个部分页面加载新的javascript的工作感觉很混乱;但是对于我的生活,我找不到任何最佳实践的建议。

有什么更好的方法来实现动态部分页面加载/卸载的效果,同时允许每个部分页面特定于页面的脚本呢?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-01 01:04:41

Firstly...once你加载javascript...you不能卸载它

setInterval问题将需要使用clearInterval

在初始化setiIterval;时,声明一些使其作为全局变量相当独特的深奥名称,确保在使用它之前在$(document).ready之外声明它。

var my_super_form_submitter

代码语言:javascript
复制
$(document.ready)function(){...
 my_super_form_submitter=setInterval(func.....

然后,无论何时加载新页面。

代码语言:javascript
复制
if(my_super_form_submitter)
clearInterval(my_super_form_submitter)

至于与其他methods....you的冲突,则可以为特定于页面的代码采用内容类协议。在每次页面加载时,更改内容div...then类将在选择器中使用该类用于jQuery。

票数 1
EN

Stack Overflow用户

发布于 2013-11-01 00:59:44

关于第一个问题:

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

例如。

代码语言:javascript
复制
$(function() {
    var timer = setInterval(function() {
        // auto-submit form every 10 seconds
        $('form').submit();
    }, 10000);
}

function uninitialize(){
    clearInterval(timer);
}

只需在替换包之前调用uninitialize即可,它应该可以工作。

UnfortunatelyI不知道如何正确地加载部分页面,但我希望它能对您有所帮助(:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19719147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档