簡體   English   中英

如何刪除在 Javascript 中動態添加的元素

[英]How to remove an element that is added dynamically in Javascript

我有以下代碼來創建一些元素:

<div id="parent">
    <div id="block_1" >
        <div>
          <input type="text">
        </div>
        <img src="arrow.jpg">
        <div>
          <input type="text">
        </div>
        <div><a href="#" class="remove_block">Remove</a></div>
    </div>
</div>

結果如下所示:

在此處輸入圖片說明

當用戶按下 ADD 按鈕時,它將轉到 Javascript 函數並創建相同的 div 塊。 這是代碼:

function add_block() {
var curDiv = $('#parent');
var i = $('#parent div').size()/4 + 1;
var newDiv='<div id="block_'+ i + '" class="parent_div">' +
'<div>' +
'<input type="text">' +
'</div>' +
'<img src="arrow.jpg">' +
'<div>' +
'<input type="text">' +
'</div><div><a class="remove_block" href="#">Remove</a></div>' +
'</div>';
$(newDiv).appendTo(curDiv);
};

每當用戶按下塊左側的“刪除”鏈接時,應刪除相應的塊。 這就是我所做的:

$('a.remove_block').on('click',function(events){
   $(this).parents('div').eq(1).remove();
});

問題是只有原始塊中的 remove 起作用,其余的沒有。 有人知道為什么嗎?

在此處輸入圖片說明

我是 jQuery 和 Javascript 的新手,所以我非常感謝任何幫助和建議 注意:我使用 jQuery 2.0.3

因為它是動態內容,你不能像靜態內容那樣綁定事件,它不會綁定到元素,因為它們在你綁定時沒有出現。

所以你應該像這樣綁定事件:

$('#parent').on('click', 'a.remove_block', function(events){
   $(this).parents('div').eq(1).remove();
});

您需要對動態添加的元素使用事件委托。 即使您使用了.on()所使用的語法也不使用事件委托。

當您注冊普通事件時,它僅將處理程序添加到當時存在於 dom 中的那些元素,但是當使用事件委托時,處理程序將注冊到執行時存在的元素,並評估傳遞的選擇器當事件冒泡到元素時

$(document).on('click', '.remove_block', function(events){
   $(this).parents('div').eq(1).remove();
});
$('a.remove_block').on('click',function(events){
  $(this).parents('.parent_div').remove();
  return false;
});

我遇到過要刪除的動態元素不是我的事件偵聽器的后代的情況:

siteSel.on('select2:select', function (e) {
      // remove some other dynamic element on page.
});

我發現的解決方案是使用when()方法。

siteSel.on('select2:select', function (e) {
      let dynamicElement = $('.element');
      $.when(dynamicElement).then(dynamicElement.remove());
});

您可以為此使用 .live:

$('body').live('click','#idDinamicElement', function(){
   // your code here
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM