2012-11-03 53 views
4

我是jQuery的新手。爲什麼不jQuery刪除動態添加行的工作?

你們知道爲什麼.remove()不適用於使用add按鈕添加的行嗎?它適用於已有的元素,例如<li>One</li>

<html> 
<head> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
    <script> 
     $(document).ready(function(){ 
      $('.more').click(function(){ 
       html_frag='<li>XXX<input type="submit" value="Remove" class="testing" /></li>'; 
       $('ul li:last').after(html_frag); 
       return false; 
      }); 
     }); 

     $(document).ready(function(){ 
      $('.testing').click(function(){ 
       $(this).remove(); 
       return false; 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <ul> 
     <li> 
      One 
      <input type="submit" value="Remove" class="testing" /> 
     </li> 
    </ul> 
    <input type="submit" value="Add" class="more" /> 
</body> 
</html> 

回答

3

因爲綁定該處理程序時DOM上不存在新添加的元素。嘗試使用委派的事件,如下面,

$(document).ready(function(){ 
     $(document).on('click', '.testing', function(){ 
      $(this).remove(); 
      return false; 
     }); 
}); 
+0

如果可能,請使用比'document'更緊的範圍來提高效率。 – Brad

+0

@Brad不幸的是他的html沒有任何容器 –

+0

對,我說他的好處,如果他有其他東西附加處理程序,它會更好。 – Brad

0

試試這個,因爲你動態創建元素,上動態創建的元素使用它不能正常工作或生活的jQuery。

$("body").on("click", ".testing", function(event){ 
     $(this).remove(); 
      return false; 
    }); 
+1

'.live()'很久以前就被棄用了。我不建議推薦使用它。 – Brad

+0

可能依賴於使用jquery庫的用戶,如果使用舊版的比使用jquery庫更甚麼? –

+1

您的建議是,「對jQuery不熟悉」並明確創建第一個項目的人會返回併爲此項目獲得一個2 - 3年前版本的jQuery,這很荒謬。無論如何,不​​建議使用棄用的功能!如果您由於某種原因(例如正在從事現有項目工作的人員),則需要在帖子中提到該方法已被棄用。你沒有,所以我添加了一條評論,提醒未來的讀者。 – Brad