如果我处于其EventListener的函数中,如何获取Element

时间:2019-07-26 08:57:29

标签: javascript callback addeventlistener

当我的页面更改时,应添加具有特定类名的元素的事件监听器。可能有多个具有此类名的Elements。元素还具有称为taskNr的属性。单击该事件侦听器功能后,应删除其ID为“ task” +该任务侦听器的元素的taskNr的元素。

我尝试为函数提供一个带有taskNr的参数,但是它更改为最后一个元素的taskNr。这就是为什么我现在考虑从函数内部引用taskNr

//fügt eventlistener für button removetask hinzu
function activateremovetasklistener(){
  var removeBtns = document.getElementsByClassName("fa fa-times-circle floatright fa-fw notfirst");
  for (i=0; i < removeBtns.length; i++) {
    var taskNr = removeBtns[i].getAttribute("taskNr");
    removeBtns[i].addEventListener("click", function(){
            removeTask(taskNr);
    })
  };    
}

//entfernt Task
function removeTask(tasknumber){
  var taskClass = document.getElementById("task" + tasknumber);
  taskClass.remove();
}

使用此代码,它始终使用taskNr中最后一个元素的removeBtns。它应该使用removeBtns[i]中的一个(事件侦听器所附加的元素)。

2 个答案:

答案 0 :(得分:2)

event对象包含有关where it was fired的详细信息:

z <- data.table()
z$A = c(1,6,4,"NULL")
z$B = c(0,8,5,4)  
z$C = c(9,6,6,6)
z$A <- as.numeric(z$A)

H <- z %>%
  mutate(h = ifelse(is.na(A), B+C, ifelse(is.na(B), A+C, ifelse(is.na(C), A+B, A+B+C )))) %>%
  select(h)

另请参阅JavaScript closure inside loops – simple practical example ,其中介绍了您的方法无效的原因。

答案 1 :(得分:1)

您始终可以使用以下命令访问click回调function中的相关元素:

event.target || event.srcElement

您的代码应为:

removeBtns[i].addEventListener("click", function(event){
    removeTask(event.target || event.srcElement);
})

function removeTask(element){
  element.remove();
}

您可以检查The Event interface MDN Reference以获得更多详细信息:

  

Event.srcElement

     

Event.target的非标准别名(来自Microsoft Internet Explorer的旧版本),出于Web兼容性目的,其他一些浏览器也开始支持该别名。

     

Event.target

     

对事件最初分配到的目标的引用。