繁体   English   中英

使用onclick事件创建多个元素(列表)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM