У меня есть страница, на которой пользователи могут создавать теги (например, здесь, в stackoverflow), которые затем отправляются (POST) на задний конец для хранения в базе данных. Пользователь может создавать теги, а также удалять их, прежде чем, наконец, нажать Submit.Javascript - удалить определенный элемент из динамически созданного массива
В 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);
к аналогичному результату.
Пожалуйста, помогите! Заранее спасибо
Спасибо, в то время как это действительно решает проблему, которую я даже не знала, что я, это не совсем работает, как предполагалось. Например, если я добавлю три тега 'a', 'b' и 'c', а затем удалите 'b', массив будет сращивать тег 'a'. Есть предположения? – bjurtown
Это потому, что 'splice' принимает в качестве первого параметра начальный индекс, который вы хотите удалить. Вы передавали 'this' как индекс, но чтобы получить фактическую позицию индекса элемента, вы можете использовать' $ (this) .index() '. Таким образом, это будет: 'tag_array.splice ($ (this) .index(), 1);' – LcSalazar
Ahh, @ Good.luck удалось решить эту проблему. Благодаря! – bjurtown