2013-06-27 65 views
0

我有一個創建一個新的<a>元素的功能,我想一個onclick事件添加到它,這是由1的JavaScript - 添加功能<a>運行的onclick屬性沒有點擊

增加給定值的函數

在功能方面,我創建這些元素:

spantags內的數字:

 var spantags = document.createElement("span"); 
     var anzahl = 1; 
     spantags.innerHTML = anzahl; 

而提到<a>元件:

 var plus = document.createElement("a"); 
     plus.innerHTML = "+"; 
     plus.onclick = more(spantags.innerHTML); 

但是,此功能已執行已創建此功能的功能,因此創建時該數字已增至2。

我讀了一個類似的問題這樣的回答: https://stackoverflow.com/a/249084/1972372

這個例子的工作,警報只來了+被點擊的時候,但它是一種內在的功能有,沒有宣佈一個像我「更多(元件)」。

所以我的問題是:是否有可能在我的例子中設置onclick屬性的聲明功能的新創建的元素一樣,但防止其立即運行?

(其他文章有一個jQuery回答過,但不幸的是我不知道的jQuery知識,不能使用它)

回答

3

是的,只是包裝在一個「代理」功能:

plus.onclick = function() { 
    more(spantags.innerHTML); 
}; 
+0

太容易了! 非常感謝! –

1

當然,但首先你必須明白,plus.onclick = more(spantags.innerHTML);將調用more與參數spantags.innerHTML並將該函數調用返回的結果分配給plus.onclick

你可以在一個代理功能把它包裝成先前建議,或者你可以把bind方法的優點結合參數函數本身:

plus.onclick = more.bind(null, spantags.innerHTML);

閱讀上綁定的位置:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

+0

這實際上並不會有相同的結果。你會綁定spantags.innerHTML的當前值(在綁定時是「1」),並且永遠不會增加過去的值。2 – landons

+0

它實際上適用於這個,所以我也會給出一個upvote,但我很困惑關於第一個參數是什麼。 我讀到這是這個說法,但我還是不太明白。 我接受了第一個答案,因爲它更容易理解。 –

+0

這是「這個」上下文。在回調本身中,使用「this」會引用你傳入的第一個參數(本例中爲「null」)。 – landons

相關問題