Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JQuery管理ajax应用程序中的javascript范围_Javascript_Jquery_Firebug - Fatal编程技术网

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

通过JQuery管理ajax应用程序中的javascript范围,javascript,jquery,firebug,Javascript,Jquery,Firebug,我想知道如何在一个完整的ajax应用程序上管理脚本范围 让我来解释一个场景 页面在div中动态加载 页面是php文件 页面包含脚本标记(静态和通过php生成),具体取决于 上下文 负载场景: 母版页通过$.load jquery函数加载页面 插入页面并执行脚本(主要是输入事件或实时事件) 当我选择另一个页面时(想象一个列出了所有页面的组合),加载场景将再次执行 母版页中重要的2 js代码行 $("#divContent").children().remove(); $("#divConte

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

让我来解释一个场景

  • 页面在div中动态加载
  • 页面是php文件
  • 页面包含脚本标记(静态和通过php生成),具体取决于 上下文
负载场景:

  • 母版页通过$.load jquery函数加载页面
  • 插入页面并执行脚本(主要是输入事件或实时事件)
  • 当我选择另一个页面时(想象一个列出了所有页面的组合),加载场景将再次执行

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

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

    这里是一个大问题,JQueryeval脚本代码,并且似乎将其放入一个eval数组中(在firebug-its中位于JQuery.mins.js/eval/seq/Array-number) 因此js永远不会从eval选项卡中卸载

    因此,如果我的页面中有一些实时事件,那么代码的执行次数与页面加载次数相同

    因此,我需要一种方法来清理该评估…或者一种自动方法来从特定范围中删除所有事件(因为我在母版页上有其他事件绑定)


    谢谢你

    一旦加载了脚本,那么就不可能卸载它了

    您可以使用iframe而不是div,这样,每当重新加载页面时,您就可以再次从iframe中的一块空白开始


    或者,编写JavaCScript时,如果同时加载多个脚本,则不会导致冲突。

    一旦加载了脚本,就不可能卸载它

    您可以使用iframe而不是div,这样,每当重新加载页面时,您就可以再次从iframe中的一块空白开始

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

    可能

    $(selector).die();
    
    有用吗?它将删除所选元素的所有live()绑定。有关更多信息,请参阅

    可能

    $(selector).die();
    

    有用吗?它将删除所选元素的所有live()绑定。有关更多信息,请参阅

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

    var ws = {};
    
    在加载的内容中:

    $( ws.funnyStuff = function() {
    // some realy funny stuff here  
    });
    
    完成后,可以放弃整个命名空间:

    ws = {};
    

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

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

    var ws = {};
    
    在加载的内容中:

    $( ws.funnyStuff = function() {
    // some realy funny stuff here  
    });
    
    完成后,可以放弃整个命名空间:

    ws = {};
    

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

    这使得与母版页的通信变得复杂。。。我需要两个页面communicate@Bgnt44如果它们来自同一个域,两个页面将能够通过相对简单的javascript相互通信。另外,还有HTML5 postMessage函数。页面使用了大部分全局javascript,我确定不能将页面代码隔离在一个使与母版页通信复杂的IFrame中。。。我需要两个页面communicate@Bgnt44如果它们来自同一个域,两个页面将能够通过相对简单的javascript相互通信。另外,还有HTML5 postMessage函数。页面使用了全局javascript的很大一部分,我确定不能在iframe中隔离页面代码。这不会阻止这些脚本中的全局代码运行(例如window.load).好的,基本上你可以在页面关闭时解除绑定事件,我知道这可能是一项要求,但仍然希望我可以将已评估的js放在一个专用范围内。它删除了所有当前的live()绑定,以便可以添加新的live()绑定,而无需复制现有绑定。但是我可能还是不明白你到底想要什么:)问题是每次页面加载都可能会添加新的相互重复的live()事件,对吗?对,而且每次页面加载都会在jquery eval数组中添加一些新的js代码,而且永远不会卸载!!!顺便说一句,die()函数可以帮助我删除多个实时事件,从而解决第一个问题。。。但是我想更进一步,删除内存中未使用的脚本,如果我可以的话。这不会阻止这些脚本中的全局代码运行(例如window.load)。好的,基本上你可以在页面关闭时解除绑定事件。我知道这可能是一个要求,但仍然希望我可以将已评估的js放在一个专用范围内。它删除了所有当前的live()绑定,以便可以添加新的live()绑定,而无需复制现有绑定。但是我可能还是不明白你到底想要什么:)问题是每次页面加载都可能会添加新的相互重复的live()事件,对吗?对,而且每次页面加载都会在jquery eval数组中添加一些新的js代码,而且永远不会卸载!!!顺便说一句,die()函数可以帮助我删除多个实时事件,从而解决第一个问题。。。但如果可以的话,我想进一步删除内存中未使用的脚本