绑定到close
类的事件正在处理HTML中包含的li
,但不适用于我用{创建的li
{1}}功能。我不知道为什么。不过,我将包含类和textNode的跨度添加到每个新项中。
addItem
答案 0 :(得分:0)
问题在这里:
let close = document.getElementsByClassName('close');
for (let i = 0; i < close.length; i++) {
close[i].addEventListener('click', function() {
let cross = close[i].parentElement;
cross.style.display = 'none';
});
}
click
处理程序将起作用!但是,在调用i
时,它将是迭代中的最后一个值。
尝试一下:
let close = document.getElementsByClassName('close');
for (let i = 0; i < close.length; i++) {
const handler = ((index) => {
return function() {
let cross = close[index].parentElement;
cross.style.display = 'none';
};
})(i);
close[i].addEventListener('click', handler);
}
这将在每次迭代中复制i
值,并在点击处理程序中使用它。
更新:
共享代码中存在上述问题。
点击处理程序不适用于li
添加的addItem
。因为,事件注册发生在使用li
添加的新addItem
之前。
您现在有2个选择。
ul
标签上添加一个事件处理程序,并管理close
点击。 https://i.imgur.com/cavNtcr.jpg。addItem
函数中添加事件处理程序。 let ul = document.getElementById('list');
let inputText = document.getElementById('inputText').value;
let li = document.createElement('li');
let textNode = document.createTextNode(inputText)
let span = document.createElement('span');
let cross = document.createTextNode('\u00D7');
span.className = 'close'
span.appendChild(cross);
span.addEventListener('click', function() {
let cross = span.parentElement;
cross.style.display = 'none';
});
li.appendChild(textNode);
li.appendChild(span);
if (inputText === '') {
alert('enter some task, please')
} else {
ul.appendChild(li);
}
}
答案 1 :(得分:0)
问题在于如果我没有记错的话,它被调用的时间是additem是正确的HTML标记调用的函数。这是正在发生的事情:
它们具有相同的类名,但是单击它们的功能未连接任何东西 解决方案:
function addclosefunction() {
let close = document.getElementsByClassName('close');
for (let i = 0; i < close.length; i++) {
close[i].addEventListener('click', function() {
let cross = close[i].parentElement;
cross.style.display = 'none'
});
}
}
addclosefunction();
function addItem() {
let ul = document.getElementById('list');
let inputText = document.getElementById('inputText').value;
let li = document.createElement('li');
let textNode = document.createTextNode(inputText)
let span = document.createElement('span');
let cross = document.createTextNode('\u00D7');
span.className = 'close'
span.appendChild(cross);
li.appendChild(textNode);
li.appendChild(span);
if (inputText === '') {
alert('enter some task, please')
} else {
ul.appendChild(li);
}
addclosefunction();
}