Javascript 获取类别筛选器控件的类型

Javascript 获取类别筛选器控件的类型,javascript,if-statement,getelementbyid,google-visualization,dashboard,Javascript,If Statement,Getelementbyid,Google Visualization,Dashboard,我有一个简单的GoogleVisualization仪表板,上面有以下代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="conten

我有一个简单的GoogleVisualization仪表板,上面有以下代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>
      Google Visualization API Sample
    </title>
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load('visualization', '1.1', {packages: ['controls']});
    </script>
    <script type="text/javascript">
      function drawVisualization() {
        // Prepare the data
        var data = google.visualization.arrayToDataTable([
          ['Name', 'Gender', 'Age', 'Donuts eaten'],
          ['Michael' , 'Male', 12, 5],
          ['Elisa', 'Female', 20, 7],
          ['Robert', 'Male', 7, 3],
          ['John', 'Male', 54, 2],
          ['Jessica', 'Female', 22, 6],
          ['Aaron', 'Male', 3, 1],
          ['Margareth', 'Female', 42, 8],
          ['Miranda', 'Female', 33, 6]
        ]);

        // Define a category picker control for the Gender column
        var categoryPicker = new google.visualization.ControlWrapper({
          'controlType': 'CategoryFilter',
          'containerId': 'control1',
          'options': {
            'filterColumnLabel': 'Gender',
            'ui': {
            'labelStacking': 'vertical',
              'allowTyping': false,
              'allowMultiple': false
            }
          }
        });

        // Define a table
        var table = new google.visualization.ChartWrapper({
          'chartType': 'Table',
          'containerId': 'chart1',
          'options': {
            'width': '300px'
          }
        });

        // Create a dashboard
        new google.visualization.Dashboard(document.getElementById('dashboard')).
            bind(categoryPicker,table).
            // Draw the entire dashboard.
            draw(data);
      }

      google.setOnLoadCallback(drawVisualization);
    </script>
  </head>
  <body style="font-family: Arial;border: 0 none;">
    <div id="dashboard">
      <table>
        <tr style='vertical-align: top'>
          <td style='width: 300px; font-size: 0.9em;'>
            <div id="control1"></div>
          </td>
          <td style='width: 600px'>
            <div style="float: left;" id="chart1"></div>
          </td>
        </tr>
      </table>
    </div>
  </body>
</html>
但是我无法得到正确的格式。那么,if条件下使用的正确格式是什么?

drawVisualization
函数外部访问
categoryPicker
对象,然后使用
getState()。selectedValues
值:

var categoryPicker;
function drawVisualization() {
  // etc.
  categoryPicker = // etc...

  // Register to hear state changes.
  google.visualization.events.addListener(categoryPicker, 'statechange', foo);

  // etc.
}

function foo() {
  // Insert your if condition here.
}

使
categoryPicker
对象可在
drawVisualization
函数外部访问,然后使用
getState()。selectedValues
值:

var categoryPicker;
function drawVisualization() {
  // etc.
  categoryPicker = // etc...

  // Register to hear state changes.
  google.visualization.events.addListener(categoryPicker, 'statechange', foo);

  // etc.
}

function foo() {
  // Insert your if condition here.
}
除了“statechange”事件处理程序外,没有办法判断控件何时发生了更改。如果您需要在控件更改时执行某些代码,您可以这样做:

google.visualization.events.addListener(control, 'statechange', function () {
    var state = control.getState();
    // do something with the state, eg:
    var whereClauses = [];
    whereClauses.push('something1 = "' + state.selectedValues[0] + '"');
    // ...
});
但是,如果您希望在任何相关控件更改时执行某些代码,则可以创建一个函数并将该函数传递给事件处理程序:

function foo () {
    var state1 = control1.getState();
    var state2 = control2.getState();
    var whereClauses = [];
    whereClauses.push('something1 = "' + state1.selectedValues[0] + '"');
    whereClauses.push('something2 = "' + state2.selectedValues[0] + '"');
    // ...
}

// add event handlers to control1 and control2 using foo
google.visualization.events.addListener(control1, 'statechange', foo);
google.visualization.events.addListener(control2, 'statechange', foo);
如果函数需要知道更改了哪个控件,则可以执行以下操作:

function foo (control, columnName) {
    var state = control.getState();
    var whereClauses = [];
    whereClauses.push(columnName + ' = "' + state.selectedValues[0] + '"');
    // ...
}

// add event handlers to control1 and control2 using foo
google.visualization.events.addListener(control1, 'statechange', function () {
    foo(control1, 'something1');
});
google.visualization.events.addListener(control2, 'statechange', function () {
    foo(control2, 'something2');
});
除了“statechange”事件处理程序外,没有办法判断控件何时发生了更改。如果您需要在控件更改时执行某些代码,您可以这样做:

google.visualization.events.addListener(control, 'statechange', function () {
    var state = control.getState();
    // do something with the state, eg:
    var whereClauses = [];
    whereClauses.push('something1 = "' + state.selectedValues[0] + '"');
    // ...
});
但是,如果您希望在任何相关控件更改时执行某些代码,则可以创建一个函数并将该函数传递给事件处理程序:

function foo () {
    var state1 = control1.getState();
    var state2 = control2.getState();
    var whereClauses = [];
    whereClauses.push('something1 = "' + state1.selectedValues[0] + '"');
    whereClauses.push('something2 = "' + state2.selectedValues[0] + '"');
    // ...
}

// add event handlers to control1 and control2 using foo
google.visualization.events.addListener(control1, 'statechange', foo);
google.visualization.events.addListener(control2, 'statechange', foo);
如果函数需要知道更改了哪个控件,则可以执行以下操作:

function foo (control, columnName) {
    var state = control.getState();
    var whereClauses = [];
    whereClauses.push(columnName + ' = "' + state.selectedValues[0] + '"');
    // ...
}

// add event handlers to control1 and control2 using foo
google.visualization.events.addListener(control1, 'statechange', function () {
    foo(control1, 'something1');
});
google.visualization.events.addListener(control2, 'statechange', function () {
    foo(control2, 'something2');
});

如何将其置于if条件中?也就是说,如果选择了类别过滤器,那么将执行一些代码。哦,您希望在设置条件时准确调用一些代码。然后,您需要在
类别识别器
上注册
状态更改
事件,并在注册的函数中执行一些代码。代码将有所帮助,有关更多信息,请参见ControlWrapper外观。但我不知道如何在if语句中使用事件。请阅读上面的新代码。这正是我在之前的评论中所说的。谢谢@Jeremy Faller的回答。我问了另一个关于你答案的问题。如果可能,请检查我的代码。如何将其放入if条件中?也就是说,如果选择了类别过滤器,那么将执行一些代码。哦,您希望在设置条件时准确调用一些代码。然后,您需要在
类别识别器
上注册
状态更改
事件,并在注册的函数中执行一些代码。代码将有所帮助,有关更多信息,请参见ControlWrapper外观。但我不知道如何在if语句中使用事件。请阅读上面的新代码。这正是我在之前的评论中所说的。谢谢@Jeremy Faller的回答。我问了另一个关于你答案的问题。如果可能的话,请检查我的代码。