0

我有一个创建新<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

此示例有效,仅在单击 + 时才出现警报,但它是那里的内部函数,而不是像我的“更多(元素)”那样声明的函数。

所以我的问题是:是否可以像在我的示例中那样将 onclick 属性设置为新创建的元素上的声明函数,但阻止它立即运行?

(另一篇文章也有 jQuery 答案,但不幸的是我对 jQuery 一无所知,无法使用它)

4

2 回答 2

3

是的,只需将其包装在“代理”函数中:

plus.onclick = function() {
    more(spantags.innerHTML);
};
于 2013-06-27T16:23:55.707 回答
1

当然可以,但首先您必须了解plus.onclick = more(spantags.innerHTML);more使用参数调用spantags.innerHTML并将从该函数调用返回的结果分配给plus.onclick.

您可以按照前面的建议将其包装在代理函数中,或者您可以利用该bind方法将参数绑定到函数本身:

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

在此处阅读 Bind:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

于 2013-06-27T16:28:39.080 回答