我有一个创建新<a>
元素的函数,我想向它添加一个onclick事件,这是一个将给定值增加1的函数。
在函数中,我创建了这些元素:
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
这个例子很有用,警告只在点击+时出现,但它是一个内部函数,而不是像我的“more(element)”那样的声明函数。
所以我的问题是:是否可以将onclick属性设置为新创建的元素上的声明函数,就像在我的示例中一样,但是阻止它立即运行?
(另一篇文章也有一个jQuery的答案,但不幸的是我对jQuery一无所知并且无法使用它)
答案 0 :(得分:3)
是的,只需将其包装在“代理”功能中:
plus.onclick = function() {
more(spantags.innerHTML);
};
答案 1 :(得分:1)
当然,但首先您必须了解plus.onclick = more(spantags.innerHTML);
将使用参数more
调用spantags.innerHTML
,并将从该函数调用返回的结果分配给plus.onclick
。
您可以按照之前的建议将其包装在代理函数中,或者您可以利用bind
方法将参数绑定到函数本身:
plus.onclick = more.bind(null, spantags.innerHTML);
阅读Bind here:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind