4 回答
TA贡献1828条经验 获得超4个赞
您需要使用事件委托。
$(document).on("click",".deleteButton",function(e) { $(this).closest(".listelement").remove() });
$(".deleteButton").click(function(e){
仅适用于页面上存在的元素,不适用于新添加的元素。
var inputText;
var itemList = [];
$("#addButton").click(function() {
inputText = $("#textInput").val();
itemList.push(inputText);
$("#textInput").val("");
showItems();
});
//not working
$(document).on("click",".deleteButton",function(e) {
$(this).closest(".listelement").remove()
});
function showItems() {
$("#list").html('');
for (var i = 0; i <= itemList.length - 1; i++) {
$("#list").append('<div class="listelement"><p type="text" class="listItem" id="listItem ' + i + '">' + itemList[i] + '</p> <button type="button" class="deleteButton" id="' + i + '">REMOVE</button><div>');
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<div class="headline">
<h1 id="headline">TO DO LIST</h1>
</div>
<div class="userInput">
<input type="text" id="textInput">
<button type="button" id="addButton">ADD ITEM</button>
</div>
<div class="list" id="list">
<div class="listelement" id="listelement">
</div>
</div>
</div>
TA贡献1911条经验 获得超7个赞
如果您只想删除您单击的特定 div,可以使用以下代码。这里不需要匹配id。
$(document).on("click",".deleteButton",function(e){
let parent = $(this).closest(".listelement");
parent.remove();
});
但是根据删除后的代码,如果添加某些内容,数组的所有数据都会显示。因为您没有从数组中删除数据。我认为您也需要从数组中删除该数据。
$(document).on("click",".deleteButton",function(e){
let parent = $(this).closest(".listelement");
let id = $(this).attr("id");
console.log(id);
itemList.splice(id, 1);
parent.remove();
});
TA贡献1813条经验 获得超2个赞
如果您尝试使用 jQuery click() 方法对动态添加到 DOM 的元素执行某些操作,它将不起作用,因为它将单击事件仅绑定到绑定时存在的元素,您可以使用
$(document).on("click", "button.deleteButton" , function() { $(this).parent().remove(); });
https://jsfiddle.net/82d0e5at/3/
TA贡献1884条经验 获得超4个赞
这里的问题是附加的元素没有附加事件侦听器,当您调用它时,$(...).click它只会将事件侦听器附加到当前存在的元素。deleteButton由于您在文档加载时调用它,并且当时该类没有任何元素,因此它不会执行任何操作。
您可以通过将删除代码移至其自己的函数并为您创建的每个新元素附加一个单击事件侦听器来解决此问题。
为了有效地做到这一点,您需要获取正在创建的元素,您可以这样做:
$(HTML Code).appendTo('#list').click(...);
这将从您传递的 html 创建一个元素,将其附加到具有 id 的元素list并附加一个单击事件侦听器,因此最终结果如下:
var inputText;
var itemList = [];
$("#addButton").click(function() {
inputText = $("#textInput").val();
itemList.push(inputText);
$("#textInput").val("");
showItems();
});
function deleteItem(e) {
console.log(e.target.id);
}
function showItems() {
$("#list").html('');
for (var i = 0; i <= itemList.length - 1; i++) {
var html = '<div class="listelement"><p type="text" class="listItem" id="listItem ' + i + '">' + itemList[i] + '</p> <button type="button" class="deleteButton" id="' + i + '">REMOVE</button><div>';
$(html).appendTo('#list').click(deleteItem);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<div class="headline">
<h1 id="headline">TO DO LIST</h1>
</div>
<div class="userInput">
<input type="text" id="textInput">
<button type="button" id="addButton">ADD ITEM</button>
</div>
<div class="list" id="list">
<div class="listelement" id="listelement">
</div>
</div>
</div>
- 4 回答
- 0 关注
- 162 浏览
添加回答
举报