2017-05-05 59 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