2012-07-25 77 views
0

我有一個JavaScript函數需要一個值。該值是從一個下拉列表開始的。我無法將價值傳遞給函數,並想知道我做錯了什麼。任何幫助,將不勝感激。javascript參數傳遞

JS功能

Puma.selectEvent = function(year) { 

     var year = year; 
     select the event 
} 

事件的下拉列表的變化。 sYear,sMonth和sSeason是下拉列表名稱。 「彪馬」並不重要。

onChange=Puma.selectEvent(sYear.value); 
+0

請給我們完整的代碼 - 到平變化你添加的功能? – Bergi 2012-07-25 17:10:05

+1

你已經驗證過,直接訪問'sYear',而不是通過名字或ID獲取,正在爲你工作?或者您已經檢索了DOM元素? – 2012-07-25 17:10:29

+0

對不起,我放了太多變數。它是sYear下拉列表的轉換。我試過getElementId,但那也沒有效果。 – MasterP 2012-07-25 17:14:15

回答

1

看起來您誤解了事件連接的工作方式。讓我們先從這條線

onChange=Puma.selectEvent(sYear.value); 

你可能認爲是有約束力的Puma.selectEvent處理程序onChange事件......但是你就錯了。如果你想這樣做,你會寫:

onChange=Puma.selectEvent; 

ie。你會將onChange設置爲「selectEvent」函數本身。你在做什麼是設置onChange到輸出對selectEvent的調用;換句話說,selectEvent返回的內容。

其次,讓我們來看看這條線:

Puma.selectEvent = function(year) { 

你可能會認爲,這將導致你得到(從選擇)今年到您的函數傳遞,但你錯了。所有事件處理程序都會通過一個事件對象(通常稱爲「e」)。現在,該事件具有屬性(如target和currentTarget),您可以使用它來獲取選擇的值,但您需要執行類似e.target.value這樣的操作。

+0

所以我怎樣才能將值從下拉列表傳遞給沒有參數的函數呢?這些功能位於兩個不同的文件中。 – MasterP 2012-07-25 17:19:48

+0

我有點不清楚:你綁定onChange的元素是什麼? – machineghost 2012-07-25 17:21:23

+0

sYear下拉列表 – MasterP 2012-07-25 17:22:59

0

有與您發佈的代碼的幾個問題:

Puma.selectEvent = function (year) { 
    // year is a parameter, you should not overwrite it 
    var year = year; // get rid of this line 
    select the event 
} 

// this line is EXECUTING Puma.selectEvent(sYear.value) 
// and assigning it's return value to the onchange property 
onChange=Puma.selectEvent(sYear.value); 

你可能想這樣做,而不是:

onChange = function() { 
    return Puma.selectEvent(sYear.value); 
};