2012-10-04 83 views
22

我已經解決了我的問題,但不能回答我自己,因爲我太新,這個網站:「容器沒有定義」谷歌圖表

原來我需要使用以下命令:

chart = new google.visualization.PieChart(document.getElementById('pie_today_div')); 

我正在使用JQuery訪問元素$('#pie_today_div')。由於現在的證據指向一個事實,那餅圖構造必須有標準的JS代碼,document.getElementById('pie_today_div')

也許別的事情上,但改變我訪問容器元素的方式修正我的代碼

原來的問題對於我的解決方案的參考

當我嘗試實例化Google PieChart對象時,出現「容器未定義」錯誤。

我驗證了我的網頁http://validator.w3.org/,我收到一條非常綠色的橫幅,表示它已經過驗證。

當頁面加載時,我不會收到js錯誤。我的Ajax調用正在使用我想要從數據庫獲取的數據進行完整的往返。

這裏是我的HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 
     <link href="/css/note.css?10022012" rel="stylesheet" type="text/css" media="screen"> 
     <script type="text/javascript" language="javascript" src="/call/js/jquery-1.7.2.min.js"></script> 
     <script type="text/javascript" src="https://www.google.com/jsapi"></script> 
     <script type="text/javascript">google.load('visualization', '1.0', {'packages':['corechart']});</script> 
     <script type="text/javascript" language="javascript" src="/call/js/init.js?10042012-2"></script> 
     <title>Call Stats</title> 
    </head> 
    <body> 
     <a href="#" id="pie_today_link">Today Stats</a> 
     <div id="pie_today_div"></div> 
    </body> 
</html> 

這裏是JS:

function drawPieChartToday() { 

    $.post('/call/ajax.php5',{ 
     action:'pieToday' 
    }, function(ticketData) { 
     var data = new google.visualization.DataTable(); 
     data.addColumn('string', 'Count'); 
     data.addColumn('number', 'Topic'); 
     for (var key in ticketData){ 
      data.addRow([key, ticketData[key]]); 
     } 
     options = { 
      title: 'Issue Topics' 
     }; 
     alert($('#pie_today_div').attr('id')); 
     chart = new google.visualization.PieChart($('#pie_today_div')); 
     chart.draw(data, options); 
    },'json');  
} 

這裏是我的調試代碼,以確保該元素已被發現: alert($('#pie_today_div').attr('id')); < - 警報「pie_today_div」

+1

看看我的回答,原因是jquery選擇器返回一組匹配元素(數組),即使在選擇唯一ID時也是如此。 – abidibo

+0

這是一個非常有用的信息,我需要記住我的剩餘IT生活。 –

回答

28

我不是jquery粉絲,但我認爲$('#pie_today_div')會返回一組匹配的元素。屬性計算的工作原理是(從jquery documentation)它「獲取匹配元素集中第一個元素的屬性值」。

所以儘量

chart = new google.visualization.PieChart($('#pie_today_div')[0]); 

或直接

chart = new google.visualization.PieChart(document.getElementById('pie_today_div')); 
+1

如何使用類名稱herer? – Gowri

+1

chart = new google.visualization.PieChart($('。class-name')[0]); – abidibo

-1

只是想提一提,這事對我來說是簡單的錯誤之後。我改變

var data = new google.visualization.DataTable(huh); 

以下在努力改變圖表類型:

var data = new google.visualization.BarChart(huh); 

但是這是完全錯誤的,您更改圖表,其中你提到的容器:

var chart = new google.visualization.ComboChart(document.getElementById('chart_div')); 
1

必須存在一行,用於加載要在網頁中顯示的可視化類型。它看起來像這樣

google.load("visualization", "1", {packages: ["corechart"]}); 

在這裏,我正在加載包corechart。將此行作爲HTML頁面內的<script>標記之後的第一行,如index.html。這應該可以解決他的問題。

8

容器錯誤恰好是,它正在尋找ID 例如:

var chart = new google.visualization.PieChart(document.getElementById('chart_div')); 

如果你缺少 該ID 因此,你會得到這個錯誤「容器沒有定義」爲谷歌圖表一個具有該chart_div ID的Div將修復此問題

相關問題