通过JQuery管理ajax应用程序中的javascript范围

时间:2011-12-22 14:30:25

标签: javascript jquery firebug

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

让我解释一下情景

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

加载场景:

  1. 主页通过$ .load jquery function
  2. 加载页面 插入
  3. 页面并执行脚本(主要是输入事件或直播事件)
  4. 当我选择另一个页面时(想象一下列出了所有页面的组合),再次执行Load Scenario ......

    母版页中重要的2 js代码行

    $("#divContent").children().remove(); 
    $("#divContent").load("*PAGES-X*");
    

    这是一个很大的问题,JQuery eval 脚本代码,似乎把它放在一个Eval数组中(在firebug中它位于jquery.mins.js / eval / seq / 数组中)编号) 所以js永远不会从eval选项卡中卸载

    因此,如果我的页面中有一些Live事件,则代码会在页面加载时执行多次...

    所以,我需要一种方法来清理那个eval ...... 或者一种自动方式从特定范围中删除所有事件(因为我在主页面上有其他事件绑定)

    谢谢你

3 个答案:

答案 0 :(得分:1)

可能

$(selector).die();

派上用场了吗?它将删除所选元素的所有live()绑定。有关详细信息,请参阅http://api.jquery.com/die/

答案 1 :(得分:0)

加载脚本后,AFAIK就无法卸载它。

您可以使用iframe而不是div,这样每当重新加载页面时,您都会再次从干净的平板(在iframe中)开始。

或者,如果一次加载多个脚本,则以不会导致冲突的方式编写javacsript。

答案 2 :(得分:0)

您可以尝试使用命名空间。 在您的主页面中:

var ws = {};

在您加载的内容中:

$( ws.funnyStuff = function() {
// some realy funny stuff here  
});

完成后,您可以放弃整个命名空间:

ws = {};

注意:firebug中的条目将保留,我不确切知道原因,但相关代码将不再执行。