无法使用onclick函数将选择标记的值添加到Google图表数据表

时间:2015-06-10 03:52:03

标签: javascript google-chartwrapper

选择标记

我已经获得了 select_value()

这个功能
<select id="data" onChange="select_value()">
  <option value="['car', 7],['jeep', 2],['taxi', 1]">aaa</option>     
  <option value="['car', 9],['taxi', 1]">bbb</option>   
</select>

我无法在谷歌图表中调用 select_value()函数...

我的剧本

function select_value() {
  var stringPie = document.getElementById('data').value;
}

谷歌图表

var data = new google.visualization.DataTable();
data.addColumn('string', 'Cartype');
data.addColumn('number', 'Amount');

var stringPie = document.getElementById('data').value; // <==
var arrPie = eval("[" + stringPie + "]");
data.addRows(arrPie);

图表始终停留在select tag的第一个选项值...

1 个答案:

答案 0 :(得分:1)

select元素包含以下值:

"['car', 7],['jeep', 2],['taxi', 1]"

似乎是多行的数据。您正在使用 eval 将其转换为数组,这是一种非常糟糕的策略。

要避免 eval ,请使用 split JSON.parse 将字符串转换为适当的结构,例如

标记:

<select id="data" onChange="select_value(this)">
  <option value="['car', 7],['jeep', 2],['taxi', 1]">aaa</option>     
  <option value="['car', 9],['taxi', 1]">bbb</option>   
</select>

脚本:

// Passing this from the listener gives direct access to the
// element on which the event was triggered
function select_value(element) {

  // JSON can't contain single quotes, so replace them with double
  var stringPie = element.value.replace(/'/g,'"');

  // Convert the values to an array of arrays:
  var arrPie = JSON.parse('[' + stringPie + ']');

  // Add the rows only if there are values to add:
  if (arrPie.length) {
    data.addRows(arrPie);
  }
}

JSON.parse 非常方便,因为像 eval 一样,您可以轻松指定不同的类型(例如字符串,数字)但避免 eval <的许多陷阱/ em>的

未经测试,但应该有效。