1

有两个下拉列表,我试图将两者的选定值传递给另一个函数。知道我这样做的方式是不正确的,但是看了这么久却看不到可能简单的解决方案。

  d3.select("#parameterType").on("change", function() 
    {
        var selectedParameter = this.value;
        console.log(selectedParameter);
        filterData(selectedParameter);
    });


    d3.select("#dateTimeTaken").on("change", function() 
    {   
        var selectedMonth = this.value;
        console.log(selectedMonth);
        filterData(selectedMonth)
    });


    function filterData(selectedParameter,selectedMonth)
    {
        console.log(selectedParameter);
        console.log(selectedMonth);
    }

谁能帮我指出正确的方向?

4

3 回答 3

2

我建议在您尝试将参数传递到的函数中检索选定的值。像这样的东西:

function filterData()
{
   var selectedParameter = document.getElementById("parameterType").value;
   var selectedMonth = document.getElementById("dateTimeTaken").value;
   console.log(selectedParameter);
   console.log(selectedMonth);
}

并在任何一个选定值发生变化时调用该函数。

d3.select("#parameterType").on("change", function() { filterData(); });

d3.select("#dateTimeTaken").on("change", function() { filterData(); });
于 2013-03-02T16:43:09.323 回答
1

试试这个方法:

跟踪函数selectedParameterselectedMonth函数之外。在onchange处理程序中,设置适当的变量,然后调用filterData不带参数的函数。然后filterData检查是否设置了两个变量,如果是,则对它们进行处理。

代码:

var filterData = (function () {
    var selectedParameter, selectedMonth;
    d3.select("#parameterType").on("change", function() 
    {
        selectedParameter = this.value;
        filterData();
    });

    d3.select("#dateTimeTaken").on("change", function() 
    {   
        selectedMonth = this.value;
        filterData();
    });

    function filterData()
    {
        if (selectedParameter === undefined || selectedMonth === undefined) {
            console.log("Both variables not set yet.");
            return;
        }
        console.log("Both variables are set!");
    }
    return filterData;
})();

我将它包装在一个闭包中,这样变量就不会泄漏到全局范围内,并让闭包返回filterData函数,这样它就可以在闭包之外被调用。

于 2013-03-02T16:39:10.490 回答
0

通过更改 var selectedParameter = this.value; 创建一个全局变量 到刚刚 selectedParameter = this.value; 没有变量。

于 2013-03-02T16:38:22.363 回答