我想知道如何管理一个完整的ajax应用程序的脚本范围
让我解释一个场景
- 页面在div中动态加载,
- 页面是php文件
- 页面包含脚本标签(静态的和通过php生成的)取决于上下文
负载场景
- 母版页面通过$加载页面。加载jquery函数
- 页面被插入并执行脚本(主要是输入事件或实时事件)
当我选择另一个页面时(想象一下列出所有页面的组合),加载场景再次执行…
母版页中重要的2js代码行
$("#divContent").children().remove();
$("#divContent").load("*PAGES-X*");
)
这里是大问题,JQuery eval脚本代码,似乎把它放在一个eval数组(在firebug它位于JQuery .min .js/eval/seq/数组号)所以js永远不会从eval标签
中卸载因此,如果我的页面中有一些Live事件,那么代码将在页面加载多少次时执行多少次…
所以,我需要一种方法来清理eval…或自动从特定范围中删除所有事件的方法(因为我在母版页上有其他事件绑定)
谢谢你
可能
$(selector).die();
会派上用场吗?它将移除所选元素的所有live()绑定。更多信息请访问http://api.jquery.com/die/!
一旦脚本被加载,它是不可能的,AFAIK,卸载它。
您可以使用iframe而不是div,这样每当页面重新加载时,您就可以重新开始(在iframe内)。
或者,在一次加载多个脚本时,以一种不会导致冲突的方式编写javascript。
您可以尝试使用名称空间。在你的主页:
var ws = {};
在你加载的内容中:
$( ws.funnyStuff = function() {
// some realy funny stuff here
});
当你完成后,你可以放弃整个命名空间:
ws = {};
注意:firebug中的条目将保留,我不知道确切原因,但相关代码将不再执行