2017-05-05 66 views
-2

道歉不是原先具有可重现测试案例 - 我现在已经做一个对CodePen: - https://codepen.io/cssgrid/pen/971328c046d97ffd24decafa20804d3b/事件冒泡和“这个”古怪

我有一大堆的产品。当有人点击每个产品div内的删除按钮时,我想从DOM中删除该产品。 我的问题是:在列表中的最后一个产品已经被删除,而不是在它的按钮,用户实际点击:(

<div class="product"> 
//some code 
<button class="remove-btn">Remove</button> 
</div><!-- end of product div --> 

var products = document.querySelectorAll(".product"); 
for (let i = 0; i < products.length; i++) { 
    products[i].addEventListener("click", function(e) { 
     if (e.target.classList.contains("remove-btn")) { 
      this.remove(); 
     } 
    }) 
} 

jQuery中也尝试了产品:

$(".remove-btn").on("click", function() { 
$(this).closest(".product").remove(); 
}) 
+0

尝试提供[MCVE],被删除您的代码不演示的最后一个项目,因为只有一个项目。尝试制作[现场演示](https://stackoverflow.blog/2014/09/introducing-runnable-javascript-css-and-html-code-snippets/)。 – Quentin

+0

我不能重现该问题:http://jsbin.com/gaqabo/1/edit?html,output – Quentin

+0

如果您单击''''并创建一个[mcve]您的代码工作 - 可能是因为SO包装代码在onload。你应该如何 – mplungjan

回答

0

其实你的代码工作在进一步的检查就好了。不过,我已经包括下面这更简单和更清洁的版本。


如你不介意使用jQuery,

$('.remove-btn').click(function() { 
 
    $(this).parent('.product').remove(); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="product"> 
 
    <p>Lorem Ipsum 1</p> 
 
    <button class="remove-btn">Remove</button> 
 
</div> 
 
<div class="product"> 
 
    <p>Lorem Ipsum 2</p> 
 
    <button class="remove-btn">Remove</button> 
 
</div> 
 
<div class="product"> 
 
    <p>Lorem Ipsum 3</p> 
 
    <button class="remove-btn">Remove</button> 
 
</div> 
 
<div class="product"> 
 
    <p>Lorem Ipsum 4</p> 
 
    <button class="remove-btn">Remove</button> 
 
</div> 
 
<div class="product"> 
 
    <p>Lorem Ipsum 5</p> 
 
    <button class="remove-btn">Remove</button> 
 
</div>

+0

原始代码有什么问题? – Quentin

+0

@Quentin - 如果他有jQuery,当他可以委托时循环并添加事件处理程序是愚蠢的 – mplungjan

+0

我的意思是“原始代码的原因是他们描述的问题的原因?” (我运行代码时无法复制的问题) – Quentin