Вы должны использовать массив users
в качестве мастера данных. При добавлении имен не принимайте это значение input
вместе с тем, что находится в крайнем правом input
. Рассматривайте текст в этом крайнем правом элементе управления как вывод , а не как ввод.
Когда вы используете jQuery, я бы также использовал jQuery в полном объеме для заполнения div
элемент. Таким образом, вы также уверены, что любые символы в именах пользователей, которые могут быть неверно истолкованы как HTML, должным образом экранированы.
Для обработчика щелчка: вероятно, лучше использовать делегирование события и определять только один щелкните обработчик элемента div
, один раз . Вы можете узнать, какая ссылка была нажата с помощью метода .index()
jQuery.
var users = [];
$("#adddis").click(function() {
addUser($('#adddisnames').val().split(",")); // pass an array as argument
$('#adddisnames').val("");
});
$('#userdiv').on("click", "a", function () { // event delegation
removeUser($(this).parent().index());
});
function buildUserlist() {
// Use jQuery functions to build the DOM list:
$('#userdiv').empty().append(
users.map(function (user) {
return $("<div>").text(user).append($("<a>").attr("href", "#").text("✘"));
})
);
$('#storadddis').val(users); // do this here -- as it is part of the output
}
function addUser(values) { // Expect an array as argument here
values = values.map(value => value.trim()) // trim values
.filter(Boolean); // ... and exclude empty entries
users = users.concat(values); // join the two arrays
users = Array.from(new Set(users)); // make list unique
buildUserlist();
}
function removeUser(index) {
users.splice(index, 1);
buildUserlist();
}
a[href] {
color:red;
padding-left: 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label>Name</label>
<input type="text" id="adddisnames" value="">
<input type="button" name="get_value" id="adddis" value="add"> =>
<input type="text" id="storadddis" size="35">
<div id="userdiv"></div>