Javascript div的抓取id,通过模板文本设置为一个数字
有一个小问题,试图Javascript div的抓取id,通过模板文本设置为一个数字,javascript,dom,getelementbyid,Javascript,Dom,Getelementbyid,有一个小问题,试图document.getElementById(),将ID设置为数字的div 您可以在下面看到,我正在循环数据库中的一个对象,并显示DOM中的每个元素。然后我给每个div一个id(这是一个数字lastTask.id): 返回以下错误: 未捕获(承诺中)TypeError:无法读取null的属性“addEventListener” 您尝试了一些变体,但没有成功。您不应该在每个项目中添加事件侦听器。 您可以通过事件冒泡来实现这一点 只需将事件侦听器添加到元素的父节点。 例如 如果由
document.getElementById()
,将ID设置为数字的div
您可以在下面看到,我正在循环数据库中的一个对象,并显示DOM中的每个元素。然后我给每个div一个id(这是一个数字lastTask.id
):
返回以下错误:
未捕获(承诺中)TypeError:无法读取null的属性“addEventListener”
您尝试了一些变体,但没有成功。您不应该在每个项目中添加事件侦听器。 您可以通过事件冒泡来实现这一点 只需将事件侦听器添加到元素的父节点。 例如 如果由于某种原因,您必须选择该元素的直接父级,而不是该元素的直接父级,因为您要多次创建项的父级,则只需记录以下内容:
console.log(event.target.parentNode.parentNode.id)代码>
如果它更高,只需继续添加parentNodes
只需玩转这些设置,直到你找到你想要的
希望我的解释可以理解。您需要将id用“”包装:
函数显示lastTask(lastTask){
console.log(lastTask);
个人任务+=
`
日期:${lastTask.Date}:任务:${lastTask.todo}
删除
`;
tasksContainer.innerHTML=单个任务;
返回任务容器;
}
当您console.log(id)
(尝试获取元素之前)显示什么?您是否尝试过执行document.getElementById(res[i].id).addEventListener…
?toString
函数不是一个独立的函数,如果您想调用它,可以将其称为const id=res[i].id.toString()代码>如果您支持较旧的浏览器,可能最好使用字符串前缀。@CalvinNunes-我得到id,但作为一个数字。这里有一个控制台日志。。。。id 1调用这些代码的顺序是什么?如果addEventListener
发生在displayLastTask
之前,则对象还不存在。在这种情况下,返回null
。我签入了最新的chrome并且
可以被document.getElementById(42)
或document.getElementById('42')
抓取。
function displayLastTask(lastTask) {
console.log(lastTask);
individualTasks +=
`<div class="todoStyle">
<p>Date: ${lastTask.date}: Task: ${lastTask.todo}</p>
<p><button class="deleteButton" id=${lastTask.id}>Delete</button>
</div>`;
tasksContainer.innerHTML = individualTasks;
return tasksContainer;
}
for (var i = 0, len = res.length; i < len; i++) {
lookup[res[i].id] = res[i];
const id = toString(res[i].id);
document.getElementById(id).addEventListener('click', function(event){
event.preventDefault();
console.log('clicked');
});
}
document.querySelector('#parent').addEventListener('click', event => {
console.log(event.target.parentNode.id);
})
function displayLastTask(lastTask) {
console.log(lastTask);
individualTasks +=
`<div class="todoStyle">
<p>Date: ${lastTask.date}: Task: ${lastTask.todo}</p>
<p><button class="deleteButton" id="${lastTask.id}">Delete</button>
</div>`;
tasksContainer.innerHTML = individualTasks;
return tasksContainer;
}