基于statechange运行javascript函数

基于statechange运行javascript函数,javascript,events,controls,google-visualization,Javascript,Events,Controls,Google Visualization,根据本文中的答案,我尝试运行以下代码。但是myfunction只需要一个google可视化事件。那么下面的代码有效吗?或者如何在单个函数中处理多个statechange google可视化事件 var categoryPicker1, categoryPicker2; function drawVisualization() { // etc. categoryPicker1 = // etc... categoryPicker2 = // etc... // Registe

根据本文中的答案,我尝试运行以下代码。但是myfunction只需要一个google可视化事件。那么下面的代码有效吗?或者如何在单个函数中处理多个statechange google可视化事件

var categoryPicker1, categoryPicker2;
function drawVisualization() {
  // etc.
  categoryPicker1 = // etc...

  categoryPicker2 = // etc...

  // Register to hear state changes.
  google.visualization.events.addListener(categoryPicker1, 'statechange', myfunction);
  google.visualization.events.addListener(categoryPicker2, 'statechange', myfunction);

  // etc.
}

function myfunction() {
  var whereClauses = [];
if (categorypicker1) {
    whereClauses.push("something1 = '" + document.getElementsByClassName('goog-inline-block goog-menu-button-caption')[0].innerHTML + "'")
}
if (categorypicker2) {
    whereClauses.push("something2 = '" + document.getElementsByClassName('goog-inline-block goog-menu-button-caption')[1].innerHTML + "'")
}
whereClause = whereClauses.join(" AND ");

// do something....
}

从您的问题中不太清楚,但我假设您正在从CategoryPicker中的选定项向数据库构建SQL查询。尽管这是一件非常糟糕/危险的事情(构建SQL客户端,并将其发送到服务器),但只要从您的CategoryPicker中抓取selectedItems,并使用“and”将它们连接起来,就可以做到这一点。比如:

如果我是你,我就不会这么做。我会将参数传递给服务器,并在那里重新映射它们(在适当地过滤它们之后,等等)。这也是非常危险的

values = categoryPicker1.getState().selectedValues;
values = values.concat(categoryPicker2.getState().selectedValues);
var args = values.map(function(_) { return "'" + _ + "'"; });
console.log(args.join(" AND "));