我正在尝试使用允许用户选择类别的下拉列表,然后 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 函数。
有人有任何想法/建议吗?先感谢您!