在另一个事件中添加事件侦听器时获取事件源(具有附加侦听器的节​​点)

时间:2016-08-26 10:10:36

标签: javascript addeventlistener

好的,这感觉就像一个基本问题,但我无法找到任何信息,所以我走了。

所以我有一个创建addNewNode(event)节点的函数(<li>),并将其附加到<ul>。单击按钮即可触发此功能。 <li>节点在附加到removeThisNode(event)子节点时附加了一个事件侦听器(<ul>),以便稍后删除它。

我需要在<li>函数中获取removeThisNode(event)节点。在这种情况下,event.target是按钮。如何获取<li>节点?我是否必须将我刚刚创建的<li>节点传递给它自己的事件监听器?还有另一种方式(没有jquery)?

(编辑)样本:

var addNewNode = function(){
    var ulNode = document.getElementById("data-list");
    var newLiNode = document.createElement("LI");
    newLiNode.appendChild(document.createTextNode("test text"));
    newLiNode.addEventListener("click",function(event){removeThisNode(event)})
    ulNode.appendChild(newLiNode);
}

var removeThisNode = function(event){
    var liNode = event.target; // <-- liNode comes up as the button in the debugger
    liNode.parent.removeChild(liNode);
}

window.onload = function(){
    var button = document.getElementById("add-data-button");
    button.addEventListener("click",function(){addNewNode()});
}

1 个答案:

答案 0 :(得分:1)

哎呀,误报。我将事件参数从一个eventListener(按钮单击)传递到下一个,所以它保持event.target相同!

var addNewNode = function(event){ //it was taking this event parameter
    var ulNode = document.getElementById("data-list");
    var newLiNode = document.createElement("LI");
    newLiNode.appendChild(document.createTextNode("test text"));
    newLiNode.addEventListener("click",function(event){removeThisNode(event)}) // <-into here
    ulNode.appendChild(newLiNode);
}