2013-03-02 172 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

相關問題