Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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
Javascript jQuery移动对象保留在内存中_Javascript_Jquery_Html_Jquery Mobile - Fatal编程技术网

Javascript jQuery移动对象保留在内存中

Javascript jQuery移动对象保留在内存中,javascript,jquery,html,jquery-mobile,Javascript,Jquery,Html,Jquery Mobile,我目前正在开发jQuery移动应用程序。在一个页面上创建了一个图表(highcharts),然后可以将其导出(canvg和canvas2ImagePlugin)。但是,我注意到图表对象保留在内存中。这样做的效果是,如果页面被多次打开,然后按下导出按钮,所有先前生成的图形都将被导出 查看chromedev工具的堆快照后,我注意到所有对象都保留在内存中。为了演示这一点,我在JSFIDLE上制作了一个非常基本的应用程序,保留了所有highchart和canvg代码:-->只需单击按钮转到第二页。如果单

我目前正在开发jQuery移动应用程序。在一个页面上创建了一个图表(highcharts),然后可以将其导出(canvg和canvas2ImagePlugin)。但是,我注意到图表对象保留在内存中。这样做的效果是,如果页面被多次打开,然后按下导出按钮,所有先前生成的图形都将被导出

查看chromedev工具的堆快照后,我注意到所有对象都保留在内存中。为了演示这一点,我在JSFIDLE上制作了一个非常基本的应用程序,保留了所有highchart和canvg代码:-->只需单击按钮转到第二页。如果单击“导出”按钮,将打开一个弹出窗口。但是,如果您返回第一页,然后再返回第二页并再次单击按钮,将打开两个弹出窗口(您可能需要允许弹出窗口)

我还尝试将analyseGraph设置为null或undefined,或者在pagebeforehide上使用.remove(),但没有帮助

谢谢你的帮助

下面是本例的代码:
HTML:

 <div data-role="page" id="p1"> 
        <div  data-role="header"><h1>Header Page 1</h1></div> 
        <div  data-role="content">
            <p>Page 1</p>
            <a href="#p2" data-role="button">Go To Page 2</a>
        </div> 
    </div> 

    <div data-role="page" id="p2">
        <div  data-role="header" data-rel="back"><h1>Header Page 2</h1></div>
        <div  data-role="content">
            <p>Page 2</p>
            <a href="#p1" data-role="button">Go To Page 1</a>
            <a id="export_graph" data-role="button" style="max-width: 300px;" data-mini="true">Export</a>
        </div>    
    </div> 

每次显示第2页时,都会将单击事件绑定到文档。所以我想你必须偶尔用“off”,比如

$(document).on('pagebeforeshow', '#p2', function (){

    var Graph = function (){
        this.drawGraph = function(){};
        this.exportCanvas = function(){
            window.open();
        };        
    }

    var analyseGraph = new Graph();
    analyseGraph.drawGraph();
     $(document).on('click', '#export_graph', function(){ 
        analyseGraph.exportCanvas();
    });

});
$(document).on('click', '#export_graph', function(){ 
    analyseGraph.exportCanvas();
    $(document).off('click');
});