1

我正在尝试使用允许用户选择类别的下拉列表,然后 D3 svg 将通过基于所选项目的主列表子集来绘制与该类别关联的几行图表。我最初有一个带有漂亮方块的无序列表,当用户单击一条线上的任意位置时,图表将使用所选类别更新:

function select_category(data_key) {
  "use strict";
  var key_items = d3.select('.d3_curve-key')
    .selectAll('div')
    .data(data_key)
    .enter()
    .append('div')
    .attr('class', 'd3_curve-key_line')
    .attr('id', function(d) {return d.category_id + "_key";} )
    ;
  key_items.append('div')
    .attr('id', function(d) {
      return 'd3_curve-key_square_' + d.category_id;
      })
    .attr('class', function(d) {
      return 'd3_curve-key_square ' + d.category_id;
      })
    ;
  key_items.append('div')
    .attr('class', 'd3_curve-key_label')
    .text( function(d) {return d.category_name;} )
    ;
  d3.selectAll('.d3_curve-key_line')
    .on('click', get_category_data)
    ;
}

function get_category_data(data_key,i){
  var selected_id = data_key.category_id;
  var ts = d3.select('#'+selected_id);
  d3.json(
    "/category_details.json",
    function(data) {
      filtered_data = data.filter( function(d) {
        return d.category_id === selected_id;})
        ;
      draw_percentiles(filtered_data, selected_id);
      }
    );
}

function draw_percentiles(line_data, line_id){
  // SVG commands.
  .
  .
  .
}

现在我正在尝试使用下拉菜单并传递相同的数据和子集参数,但由于某种原因,所选类别的参数(以及与此相关的数据集)没有被传递给绘图函数:

var selection_drop_down = d3.select('#d3_curve-selection_area')
  .append('select')
    .on('change', get_category_data)
  .selectAll('option')
  .data(data_key)
  .enter()
  .append('option')
    .attr('class', 'd3_curve-selection_area-drop_down_list')
    .attr('id', function(d) {return d.category_id + "_key";} )
    .attr('value', function(d) {return d.category_id;} )
    .text( function(d) {return d.category_name;} ) 
  ;

下拉列表正确显示,但没有任何内容传递给 get_category_data 函数。

有人有任何想法/建议吗?先感谢您!

4

1 回答 1

0

您的函数 get_category_data 被调用而没有任何参数传递给它。

因为它看起来不像 get_category_data 从这里使用索引变量,你可能会逃脱改变

var selected_id = data_key.category_id;

var selected_id = this.category_id;

并从改变你的函数的定义

function get_category_data(data_key,i){

function get_category_data(){

这个答案也可能有帮助: 使用 d3.js 添加下拉菜单

于 2013-01-20T04:51:06.930 回答