Javascript-从动态创建的数组中删除特定元素
我有一个页面,用户可以在其中创建标记(很像stackoverflow中的标记),然后将这些标记发送(POST)到后端以存储在数据库中。用户可以制作标签,但也可以在最后点击Submit之前删除标签 在DOM中,标记与“x”按钮一起生成。“x”按钮从DOM中删除元素,但从数组中删除时会出现问题。我能找到的最接近的解决方案是,但我无法让它对我完全起作用 下面是javascript(我正在使用JQuery) 类似的结果Javascript-从动态创建的数组中删除特定元素,javascript,jquery,arrays,dynamic,splice,Javascript,Jquery,Arrays,Dynamic,Splice,我有一个页面,用户可以在其中创建标记(很像stackoverflow中的标记),然后将这些标记发送(POST)到后端以存储在数据库中。用户可以制作标签,但也可以在最后点击Submit之前删除标签 在DOM中,标记与“x”按钮一起生成。“x”按钮从DOM中删除元素,但从数组中删除时会出现问题。我能找到的最接近的解决方案是,但我无法让它对我完全起作用 下面是javascript(我正在使用JQuery) 类似的结果 请帮忙!提前感谢拼接部件正常。问题是您将单击回调添加到.removetag的次数太
请帮忙!提前感谢拼接部件正常。问题是您将单击回调添加到
.removetag
的次数太多
每次添加新元素时,您都在向页面上已有的每个项目添加另一个单击事件。removetag
项目
$('.removetag').click(function()
这样,每当您单击一个元素时,所有其他元素都会被分配来触发click回调
解决方案
相反,在创建标记时,只将单击事件设置为最后添加的。removetag
元素:
$('.removetag').last().click(function()
您可能应该使用类似于.indexOf()
的方法来获取元素的索引,然后拼接数组:
tag_array.splice(tag_array.indexOf(elm),1);
谢谢,虽然这确实解决了一个我甚至不知道自己遇到的问题,但它并没有像预期的那样起作用。例如,如果我添加三个标记“a”、“b”和“c”,然后删除“b”,阵列将拼接标记“a”。有什么想法吗?这是因为splice
将要删除的初始索引作为第一个参数。您将this
作为索引传递,但要获取元素的实际索引位置,可以使用$(this).index()
。所以它应该是:tag_array.splice($(this.index(),1)代码>
$('.removetag').last().click(function()
tag_array.splice(tag_array.indexOf(elm),1);