2013-03-02 173 views
1

有两个下拉列表,我试图将选定的值传递给另一个函数。知道我在做的方式是不正确的,但一直看着它很长时间看不到可能简单的解决方案。将变量从多个javascript函数传递给另一个?

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); 
    } 

任何人都可以帮助指向正确的方向吗?

回答

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(); }); 
+0

谢谢 - 也完美的工作!:) – Newbie 2013-03-02 16:51:25

0

通过更改var来创建全局变量selectedParameter = this.value;只是selectedParameter = this.value;没有变化。

+1

Globals是矫枉过正。在外部范围声明一个局部变量要容易得多,在这个范围内,所有三个函数都可以看到它。 – DCoder 2013-03-02 16:40:40

+0

我想你的权利,但他们为什么是过度杀伤力?即时通讯新的JavaScript。 – 2013-03-02 17:02:41

+1

[为什么全局变量被认为是坏习惯?](http://stackoverflow.com/questions/10525582/why-are-global-variables-considered-bad-practice-javascript) – DCoder 2013-03-02 17:04:14

1

试试这个办法:

selectedParameter跟踪和selectedMonth以外的功能。在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功能,所以它可以只是封闭的可调用之外。

+0

谢谢你Claudiu你的方法也可以完美运行,但是只能接受一个:) – Newbie 2013-03-02 17:33:39

+0

不用担心!无论如何,GwynnBleidd的回答更有意义。 – Claudiu 2013-03-02 17:39:58

相关问题