【发布时间】:2018-07-29 20:12:30
【问题描述】:
我想用 html 和 javascript 动态创建、填充和清除列表。列表的创建和填充工作正常,但是当我想将删除按钮添加到列表项时,我无法将 onclick 事件附加到新创建的元素。这是我的完整函数,每次printlist 数组发生一些变化时都会调用它:
var printlist = [];
var awesome = document.createElement("i");
awesome.className = "fa fa-minus";
function addToList(stationid, stationname)
{
var object = {id: stationid, name: stationname};
printlist.push(object);
drawList();
}
function removeFromList(id)
{
printlist.splice(id, 1);
drawList();
}
function drawList()
{
if (printlist.length > 0)
{
document.getElementById("printListDialog").style.visibility = 'visible';
var dlg = document.getElementById("DlgContent");
dlg.innerHTML = "";
for (var i = 0; i < printlist.length; i++)
{
var item = document.createElement("li");
item.className = "list-group-item";
var link = document.createElement("a");
link.href = "#";
link.dataset.listnumber = i;
link.style.color = "red";
link.style.float = "right";
link.appendChild(awesome);
link.onclick = function(){onRemove();};
item.innerHTML = printlist[i].name + " " + link.outerHTML;
dlg.appendChild(item);
}
}
else
{
document.getElementById("printListDialog").style.visibility = 'hidden';
}
}
function onRemove(e)
{
if (!e)
e = window.event;
var sender = e.srcElement || e.target;
removeFromList(sender.dataset.listnumber);
}
我试过了:
link.onclick = function(){onRemove();};
还有
link.addEventListener("click", onRemove);
这两行都没有成功从脚本中添加事件。但是,当我从控制台调用上述 2 行中的任何一行时,它可以工作并且事件已附加。
为什么它可以从控制台运行,但不能从脚本运行?
【问题讨论】:
-
您确实意识到您只能在创建元素时将事件附加到元素。因此,在您实际将元素放入 DOM 之后。
-
什么是 ->
awesome -
@Leon
So after you actually placed the element in the DOM元素不需要成为 DOM 的一部分才能附加事件,但当然需要创建.. :)
标签: javascript dom addeventlistener dom-events