【问题标题】:Why is google chart function not being called when it's inside a function?为什么谷歌图表函数在函数内部时不被调用?
【发布时间】:2013-08-25 00:24:11
【问题描述】:

我正试图让我的谷歌图表在他们点击标签链接后显示,但谷歌图表不显示。

我在ChartlyDaily 中包含了谷歌图表代码。当它在ChartDaily 函数之外时,它可以工作,但在它里面却不行。

     <script type="text/javascript" src="https://www.google.com/jsapi"></script>
                <script type="text/javascript">
                google.load("visualization", "1", {packages:["corechart"]});
                function ChartDaily(){
                  google.setOnLoadCallback(drawChartDaily);
                  function drawChartDaily() {
                   var chart_data = ['3',7];
                   alert(chart_data);
                   var data = google.visualization.arrayToDataTable([
                    ['Scoring Activity', 'Points given'], chart_data]);

                   var options = {
                    title: 'Semis overall scoring activity'
                  };

                  var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
                  chart.draw(data, options);
                }
              }
              jQuery(document).ready(function() { 
                $('#tabs > div').hide();
                $('#tabs div:first').fadeIn('slow');
                $('#tabs ul li:first').addClass('active');
                $('#tabs ul li a').click(function(){
                    $('#tabs ul li.active').removeClass('active');  // <== Only what you need
                    $(this).parent().addClass('active');
                    var selectedTab=$(this).attr('href');
                    $('#tabs > div').fadeOut('slow', function() {       // <== Use a callback
                        $(selectedTab).delay(10).fadeIn('fast');          // <== add a delay
                      });        
                    return false;
                  });
                $('#menu_tab1').click(function(){
                  ChartDaily(); // supposed to show the chart
                }); 

                $('#menu_tab2').click(function(){
                 alert('tab-2 got clicked!!');

               }); 

                $('#menu_tab3').click(function(){
                 alert('tab-3 got clicked!!');

               });

                $('#menu_tab4').click(function(){
                 alert('tab-4 got clicked!!');

               });

              });

</script>

  <div id="chart_div" style=" margin-left:-280px;width: 800px; height: 500px;"></div> 

【问题讨论】:

    标签: javascript jquery google-visualization


    【解决方案1】:

    这里有一些东西可以重新开始。

    function GoogleChart() {
        this.chart_data = ['3',7];
        this.data_table = google.visualization.arrayToDataTable([['Scoring Activity', 'Points given'], chart_data]);
        this.options = {
            title: 'Semis overall scoring activity'
        };
    
        this.chart = new google.visualization.PieChart(document.getElementById('chart_div'));    
    }
    
    GoogleChart.prototype.drawChartDaily = function () {
        this.chart.draw(this.data_table, this.options);
    };
    
    $(function () {
        function myOnLoadCallback() {
            var googleChart = new GoogleChart();
    
            $('#menu_tab1').click(function(){
                googleChart.drawChartDaily();
            });
        }
    
        google.load("visualization", "1", {packages:["corechart"]});
        google.setOnLoadCallback(myOnLoadCallback);
    });
    

    编辑:更改为未经测试的示例。

    【讨论】:

    • 在什么函数之后????因为我需要在单击选项卡时绘制 ChartDaily 函数,其中包括 drawchartDaily 函数
    • 对不起,我有点误导你。我认为必须纠正的另一个问题是 google.setOnLoadCallback(drawChartDaily);应该只调用一次。为了回答您的评论问题,我也提到了 drawChartDaily 函数。
    • 那么我的错误在哪里......如何调用在点击时打印图表的函数
    【解决方案2】:

    Google 加载程序存在从其他函数内部调用的问题,因此最好让它自行运行。试试这样的:

    function ChartDaily () {
        var chart_data = ['3',7];
        var data = google.visualization.arrayToDataTable([
            ['Scoring Activity', 'Points given'],
            chart_data
        ]);
    
        var options = {
            title: 'Semis overall scoring activity'
        };
    
        var chart = new oogle.visualization.PieChart(document.getElementById('chart_div'));
        chart.draw(data, options);
    }
    function init () {
        $('#menu_tab1').click(function(){
            ChartDaily();
        });
    }
    google.load("visualization", "1", {packages:["corechart"], callback: init});
    

    【讨论】:

    • 如果我们异步加载图表脚本,我们应该如何加载谷歌图表?一旦脚本完成加载,我们需要调用 google.load。但是由于某种原因,如果图表在命名函数中,它将无法工作???
    • 我对这个主题的了解已经过时了好几年,但是当我最后一次使用可视化 API 时,从函数内部调用加载器时无法正常工作。我一直无法弄清楚为什么会这样。不过,加载程序问题现在完全有可能得到修复。如果不是,我建议用一个你想要完成的例子来打开你自己的问题。
    • 该问题尚未解决,我已将其隔离以知道它在命名函数中不起作用,但是在像 setTimeout(function(){google.charts.load ... etc},0) 这样具有 setTimeout 的匿名函数中,它确实起作用,这不是很有用。不过谢谢
    猜你喜欢
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    相关资源
    最近更新 更多