2014-10-17 65 views
0

當我點擊我的頁面上的任何選擇時,函數告訴我的唯一情況是它使用最後一個Select。javascript for addEventListener沒有正確分配

假設我在我的頁面上有6個選擇,我首先爲他們分配了一個addEventListener,它們都將ID作爲參數傳遞,然後當更改其中的任何一個時,我希望警報說「OK + select I choose」,但我得到的總是「OK gubeSelect6」。

爲什麼當我選擇1-5時不顯示正確的東西?我的addEventListener錯了嗎?

提前許多感謝,

function resetValues(ddl) { 
    alert("OK " + ddl); 
} 

var selects = document.getElementsByName('gubeSelect'); 
var sel; 

console.log(selects); 

for(var z = 0; z < selects.length; z++){ 
    console.log(z + " " + selects[z].id + " " + selects[z].name); 
    sel = selects[z]; 
    document.getElementById(sel.id).addEventListener("change", function() { 
     resetValues(sel.id); 
    }); 
} 
+0

是的我可以看到它是如何重複的,但是搜索的計算器並沒有給我答案,主要是因爲使用的術語。我從來沒有想過在循環中尋找javascript閉包。不過謝謝,這是一篇非常有用的文章,我將來會回顧它。 – Sean 2014-10-17 07:11:37

回答

1

試試這個:

document.getElementById(sel.id).addEventListener("change", function() { 
     resetValues(this.id); 
    }); 

由事件發生的時間sel.id將永遠6. 您需要解決您添加的元素傾聽者。

+0

事實上,這個答案並不能解釋實際問題,也不能解釋爲什麼這會起作用。 – Cerbrus 2014-10-17 06:48:47

+0

這是否讓你滿意? – user733421 2014-10-17 06:52:36

+0

是的,好多了! – Cerbrus 2014-10-17 06:53:38

1

嘗試使用resetValues(this.id);代替resetValues(sel.id);

我認爲當你調用resetValues(sel.id);這裏sel變量發送參考功能。當你改變sel的值時,它會改變以前的所有值sel s

+0

我只給了user733421的解決方案,因爲他先來了,但你的解釋有幫助。 – Sean 2014-10-17 07:13:24