javascript - 我必须点击两次,为什么? (JavaScript onclick 事件处理程序)

标签 javascript html css

我是 JavaScript 和网络开发的新手,这是我第一次看到这种错误。这是一个非常基本的例子,我有两个 div——左边和右边——左边有五个图像,右边一个是空的,我还有两个按钮复制和删除,每个按钮都有一个 onclick 事件处理程序。复制按钮复制整个左侧节点 (div) 并将其附加到右侧 div ,删除按钮应该删除右侧 div 中的最后一个图像,它确实如此,问题是我必须在删除按钮上单击两次才能删除一个图像所以我必须点击 10 次才能删除整个集合。为什么会这样?我应该怎么做才能使删除按钮只需单击一次即可删除图像?

这是我的全部代码,在 Microsoft Edge 和 Google chrome 上进行了测试,我得到了相同的结果。

var theLeftSide = document.getElementById("leftSide");
var theRightSide = document.getElementById("rightSide");


function Copy() {
  copy = theLeftSide.cloneNode(true);
  theRightSide.appendChild(copy);
}

function Delete() {
  copy.removeChild(copy.lastChild);
}
div {
  position: absolute;
  width: 670px;
  height: 520px;
  background: red
}
#rightSide {
  position: absolute;
  left: 670px;
  border-left: 1px solid black;
  background: black
}
<input type="button" value="Copy" onclick="Copy()">
<input type="button" value="delete" id="btn" onclick="Delete()">

<div id="leftSide" style="width:400px">
  <img src="smile.png" />
  <img src="smile.png" />
  <img src="smile.png" />
  <img src="smile.png" />
  <img src="smile.png" />
</div>

<div id="rightSide">

</div>

最佳答案

大多数浏览器默认在页面的每个元素之间插入一个空文本节点,您的代码会为每个 img 删除一个空节点,这就是它似乎有一半时间有效的原因。

试试这个:

function Delete(){
  var imgs = document.querySelectorAll('.rightSide img');
  copy.removeChild(imgs[imgs.length-1]);
}

关于javascript - 我必须点击两次,为什么? (JavaScript onclick 事件处理程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34094866/

相关文章:

CSS3 列空间底部

javascript - 使用 .htaccess 重定向 css|js|img|fonts 文件夹

javascript - 在表格单元格内循环对象并创建无序列表

javascript - "do this or throw an error"的简明语法

javascript - 为什么我的 HTML 无法识别我的 Angular JS

php - Mysql和PHP以html列表显示所有用户数据

Javascript、SetInterval 和 SetTimeOut 函数导致滚动不稳定

javascript - 如何使用 CSS 中的 SVG 设置 SVG 圆填充?

java - 如何更改主键自动递增,以便在删除行时不会跳过值

c# - Asp.net 图表,如何将 X 轴标签位置设置为左对齐而不是居中?