当我的页面更改时,应添加具有特定类名的元素的事件监听器。可能有多个具有此类名的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]
中的一个(事件侦听器所附加的元素)。
答案 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
对事件最初分配到的目标的引用。