2013-08-25 2 views
2

탭 링크를 클릭하면 내 Google 차트를 표시하려고하지만 Google 차트는 표시되지 않습니다.Google 차트 함수가 함수 안에있을 때 호출되지 않는 이유는 무엇입니까?

ChartlyDaily 안에 Google 차트 코드를 포함 시켰습니다. 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> 

답변

0

여기부터 다시 시작하겠습니다.

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); 
}); 

편집 : 테스트되지 않은 예제로 변경되었습니다.

+0

탭을 클릭 할 때 drawchartDaily 함수를 포함하는 ChartDaily 함수를 차트 화해야하기 때문에 –

+0

죄송합니다. 수정해야하는 또 다른 문제는 google.setOnLoadCallback (drawChartDaily); 한 번만 호출해야합니다. 귀하의 코멘트 질문에 대답하기 위해 drawChartDaily 함수도 참조하고있었습니다. – walleboom

+0

그럼 내 오류는 .. 어디에서 클릭하면 차트를 인쇄하는 함수를 호출 할 수 있습니까 –

0

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}); 
+0

차트 스크립트를로드하는 데 비동기 적이면 Google 차트를로드하려면 어떻게해야합니까? 스크립트가로드되면 google.load를 호출해야합니다. 그러나 내부의 명명 된 함수 인 경우 어떤 이유로 차트가 작동하지 않습니다 ??? – TetraDev

+0

피사체에 대한 지식은 현재 몇 년 전이지만, 시각화 API를 마지막으로 사용하면 기능 내부에서 호출 할 때 로더가 제대로 작동하지 않습니다. 나는 이것이 왜 그런지를 결코 알 수 없었다. 하지만 로더 문제는 이제 해결 될 가능성이 있습니다. 그렇지 않은 경우, 성취하려는 것을 보여주는 예제를 사용하여 자신의 질문을 열 것을 제안합니다. – asgallant

+0

문제가 해결되지 않았으므로 이름이 지정된 함수에서는 작동하지 않는다는 것을 알기 위해 격리되었습니다. setTimeout (function() {google.charts.load ... 등의 익명 함수에서 }, 0)', 잘 작동하지 않는다. 그래도 고마워 – TetraDev

관련 문제