如何在循环期间添加onclick事件时添加唯一参数
How do I add an unique argument when adding onclick events during a loop?
我要做的是使用参数在每个按钮上添加一个唯一的onclick
,这样我就可以在单击它们时识别每个按钮,使用功能参数。
function createProducts() {
for(var i = 0; i < products.length;i++) {
var li = document.createElement("li");
li.className = "products";
li.onclick = "purchase(" + i + ")";
li.innerHTML = products[i][0] + "<span class='"price'"> Klikk/s: " + products[i][1] + " Pris: " + products[i][2] + "</span>";
document.getElementById("list").appendChild(li);
}
}
function purchase(id) {
alert(id);
}
I've try
li.onclick = purchase(i);
和
li.onclick = "purchase(" + i + ")";
您有几个选择。您可以为处理程序创建一个变量来关闭它,它不会改变(如i
)。您可以在Function#bind
:
function createProducts() {
for(var i = 0; i < products.length;i++) {
var li = document.createElement("li");
li.className = "products";
li.onclick = purchase.bind(li, i); // <====
li.innerHTML = products[i][0] + "<span class='"price'"> Klikk/s: " + products[i][1] + " Pris: " + products[i][2] + "</span>";
document.getElementById("list").appendChild(li);
}
}
Function#bind
返回一个函数,当调用该函数时,将使用特定的this
值(我们将其设置为元素引用)和传递给bind
(在我们的示例中为i
)的任何参数调用原始函数。因为绑定的值是调用bind
时i
的值,而不是点击发生时,所以它不会像i
那样发生变化。
或者,您可以将id
作为属性存储在元素本身,然后在处理程序中使用它:
function createProducts() {
for(var i = 0; i < products.length;i++) {
var li = document.createElement("li");
li.className = "products";
li.setAttribute("data-id", i);
li.onclick = purchase;
li.innerHTML = products[i][0] + "<span class='"price'"> Klikk/s: " + products[i][1] + " Pris: " + products[i][2] + "</span>";
document.getElementById("list").appendChild(li);
}
}
function purchase() {
// Use this.getAttribute("data-id") here to get the value
}
注意,在这两种情况下,我们使用的是真正的函数引用,而不是字符串。你可以在元素上使用onXyz
属性的函数,当然也可以使用标准的addEventListener
(或旧IE上的attachEvent
)。
在li
创建循环中试试:
li.onclick = purchase;
li.dataset.index = i;
在purchase
事件:
function purchase(id) {
var index = this.dataset.index;
}
更多关于数据属性(dataset
)的信息。
相关文章:
- 使用jQuery动态添加onClick事件
- 如何在Chart.js v2.0中的标签上添加OnClick事件
- 如何在使用javascript生成的anchor标记上添加onclick事件
- 解析具有target=“”的链接;新的“;并添加onclick事件
- 使用对象中的值添加onclick事件
- 动态创建元素和添加onclick事件不起作用
- JSP和jQuery-向可变数量的元素添加onclick函数
- 为什么Javascript不会添加onclick
- Opencart 过滤器添加 onclick 事件以替换提交按钮
- 使用 javascript 添加 onclick 事件侦听器和元素
- 选择输入时,在链接上添加 onclick 标记
- 在图表上使用高图表库制作的图表上添加 onclick 事件
- 动态添加onclick到元素,传递函数参数
- 如何通过 addEventListener 添加 onclick=“return func()”
- JavaScript 从脚本添加 onclick with paramenter
- 在标记Google Maps v3上添加onclick事件
- Internet Explorer BHO添加onclick事件
- jstree设置nodehref链接并添加onclick事件
- 添加onclick=“;return false”;链接
- 如何添加onclick=;return false”;在php中