0

单击几个复选框控件时,我想调用一个函数,

$('input[name=filt_box_gen]').click(function() {  
nodescheckclick(this,1);
})  

所以我用控件名称制作了一个数组,

var nodesfilterlist = ['input[name=filt_box_gen]','input[name=filt_box_que]','input[name=filt_box_ans]'];  

...但只是为了能够使其工作仍然调用函数三次,每种情况一次...

$(nodesfilterlist[0]).click(function() {
nodescheckclick(this,0);
});

$(nodesfilterlist[1]).click(function() {
nodescheckclick(this,1);
});

$(nodesfilterlist[2]).click(function() {
nodescheckclick(this,2);
});  

我如何遍历数组以nodescheckclik仅使用一个函数调用该函数?

谢谢!

4

1 回答 1

1

正如评论中提到的,这更像是一个 javascript 或 jQuery 问题,而不是 d3.js 问题。

您可以将内置forEach()函数用于数组。即:

nodesfilterlist.forEach(function(d,i){
    $(d).click(function(){nodescheckclick(this, i)})
})

作为d数组i中的元素和数组中元素的索引。


现在,如果您实际使用 d3 并且您nodefilterlist的数据是您正在处理的数据。然后你会有类似的东西:

var nodes = d3.select("#checkBoxContainer") // Container for checkBoxes
    .selectAll("#checkBox") //name it as you wish, will create as many elements as there is in the data
    .data(nodefilterlist) //append the data you want to use
    //.attr("color", "blue") // would set attributes to data
    .on("click", nodeschecklist) //perform action on data

您甚至不必为nodeschecklist调用编写更多内容,因为它会自动按预期翻译 ( .on("click", function(d, i){nodeschecklist(d,i)})),因为两个版本具有相同的签名。

于 2013-04-21T07:23:08.193 回答