2013-06-27 35 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

相关问题