通过JQuery管理ajax应用程序中的javascript作用域

Manage javascript scope in ajax application via JQuery

本文关键字:javascript 作用域 应用程序 JQuery 管理 ajax 通过      更新时间:2023-09-26

我想知道如何管理一个完整的ajax应用程序的脚本范围

让我解释一个场景

  • 页面在div中动态加载,
  • 页面是php文件
  • 页面包含脚本标签(静态的和通过php生成的)取决于上下文

负载场景

  1. 母版页面通过$加载页面。加载jquery函数
  2. 页面被插入并执行脚本(主要是输入事件或实时事件)

当我选择另一个页面时(想象一下列出所有页面的组合),加载场景再次执行…

母版页中重要的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中的条目将保留,我不知道确切原因,但相关代码将不再执行