选择标记
我已经获得了 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的第一个选项值...
答案 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>的
未经测试,但应该有效。