Javascript Onclick事件不发生';t在另一个函数的乘积内工作
绑定到Javascript Onclick事件不发生';t在另一个函数的乘积内工作,javascript,Javascript,绑定到close类的事件正在处理HTML中包含的li,但它不在我使用addItem函数创建的li上工作。我不明白为什么。不过,我将包含类和textNode的span添加到每个新项中 function addCross() { let myNodeList = document.getElementsByTagName('li'); for (let i = 0; i < myNodeList.length; i++) { let span = document.create
close
类的事件正在处理HTML中包含的li
,但它不在我使用addItem
函数创建的li
上工作。我不明白为什么。不过,我将包含类和textNode的span添加到每个新项中
function addCross() {
let myNodeList = document.getElementsByTagName('li');
for (let i = 0; i < myNodeList.length; i++) {
let span = document.createElement('span');
let cross = document.createTextNode('\u00D7');
span.className = 'close'
span.appendChild(cross);
if (myNodeList[i])
myNodeList[i].appendChild(span);
}
}
addCross();
//---------------------------------------------
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';
});
}
//-----------------------------------------------
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);
}
}
```
函数addCross(){
让myNodeList=document.getElementsByTagName('li');
for(设i=0;i
问题在于:
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';
});
}
它在每次迭代中复制i
值,并在单击处理程序中使用该值
更新:
上述问题存在于共享代码中
单击处理程序将无法处理由addItem
添加的li
。因为,事件注册发生在使用addItem
添加新的li
之前。
你现在有两个选择
ul
上添加一个事件处理程序,标记并管理关闭
点击李>
addItem
函数中添加事件处理程序,如下所示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';
});
}
它在每次迭代中复制i
值,并在单击处理程序中使用该值
更新:
上述问题存在于共享代码中
单击处理程序将无法处理由addItem
添加的li
。因为,事件注册发生在使用addItem
添加新的li
之前。
你现在有两个选择
ul
上添加一个事件处理程序,标记并管理关闭
点击李>
addItem
函数中添加事件处理程序,如下所示问题在于如果我没有弄错的话调用它的时间。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();
}
function addclosefunction(){
let close=document.getElementsByClassName('close');
for(设i=0;i
问题在于如果我没有弄错的话调用它的时间。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();
}
function addclosefunction(){
let close=document.getElementsByClassName('close');
for(设i=0;i
可能是因为它们尚未加载到dom中,请尝试
document.ready()
或document.load()
我建议您为close
过程/变量创建一个函数。问题是,在创建新元素之前,您使用close
类获取所有元素,而它不知道新创建的元素。如果您使用函数而不是let,它将在每次执行时获得元素,而不是它应该工作的。当我将整个javascript包装到一个窗口中时。onload=function(){}它告诉我addItem函数没有定义可能是因为它们仍然没有加载到dom中,请尝试doc