我有一个页面,用户可以在其中创建标签(就像在stackoverflow中一样),然后将其发送(POST)到后端以存储在数据库中。用户可以制作标签,但也可以在最终点击提交之前将其删除。
在DOM中,标签与' x'一起生成。按钮。 ' x'按钮从DOM中删除元素,但从数组中删除时会出现问题。我能找到最接近解决方案的是this question,但是我无法让它为我工作。
这里是javascript(我使用JQuery)
window.tag_array = [];
$( "#addtag" ).click(function() {
var tag = $("#input-tag").val();
//if tag is empty
if(!$('#input-tag').val()) {
alert("can't be empty");
} else {
//put tag.val into an array
tag_array.push(tag);
//add to DOM
$( "#tagsbox" )
.append( "<div class='displaytag'><i>"+tag+"</i><input type='hidden' class='tag' value="+tag+"><button onClick='return false;' class='removetag'>x</button></div>" );
//reset value in text area to null
$("#input-tag").val("");
//remove tag onclick
$('.removetag').click(function() {
$(this).parent().remove(); //remove tag from DOM
//splice from array
tag_array.splice( this, 1 ); //<--HERE IS PROBLEM (i think)
});
} //end else
alert(tag_array); //check array
});
最终结果是拼接取出了太多的数组项。
我也试过
tag_array.splice(tag_array.indexOf(tag),1);
得到类似的结果。
请帮忙!提前致谢
答案 0 :(得分:3)
答案 1 :(得分:2)
splice
部分没问题。问题是您向.removetag
添加了一次点击回调太多次了。
每次添加新元素时,都会向页面上已有的click
项添加另一个.removetag
事件。
$('.removetag').click(function()
这样,每当你点击一个元素时,所有其他元素都被指定为触发点击回调。
<强>解决方案强>
相反,在创建代码时,只将click事件设置为最后添加的.removetag
元素:
$('.removetag').last().click(function()