[英]create multiple elements (list) with onclick event
我正在尝试将多个元素添加到列表中,并且每个元素应使用不同的参数执行相同的click函数,问题是变量x始终对列表的所有元素包含相同的值。
如何添加元素并使用其他参数调用onclick事件?
var addQuickLabelList = function(txtList,ul) {
for (i = 0; i<txtList.length ; i++) {
var li = document.createElement("li");
li.setAttribute("data-icon", "false");
var a = document.createElement("a");
a.innerHTML = txtList[i];
li.appendChild(a);
var x = "#"+txtList[i];
a.addEventListener("click", function(){
y = x.clone();
alert(x);
} , false);// add
$(ul).append(li);
}
};
x
始终获得相同的值,因为所有事件处理程序共享同一个var x
变量。 要将变量的作用域限定为块,请使用let
(如果不变则为const
)而不是var
。
或者,您可以在txtList
数组上使用.forEach()
,以便将var
的范围限定为回调的调用。
var addQuickLabelList = function(txtList,ul) {
txtList.forEach(function(txtItem) {
var li = document.createElement("li");
li.setAttribute("data-icon", "false");
var a = li.appendChild(document.createElement("a"));
a.innerHTML = txtItem;
var x = "#"+txtItem;
a.addEventListener("click", function(){
console.log(x);
} , false);
ul.appendChild(li);
});
};
但是,您甚至根本不需要x
变量。 你已经设置文本的内容a
,所以你可以抢来代替。 这意味着您也可以重用该函数,这更好。
function handler() {
console.log("#" + this.textContent);
}
var addQuickLabelList = function(txtList,ul) {
txtList.forEach(function(txtItem) {
var li = document.createElement("li");
li.setAttribute("data-icon", "false");
var a = li.appendChild(document.createElement("a"));
a.innerHTML = txtItem;
var x = "#"+txtItem;
a.addEventListener("click", handler, false);
ul.appendChild(li);
});
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.