Reputation: 773
$('.remove-member').click(function () {
var toRemove = $(this).parent().text().slice(0, -1);
var members = $(this).parent().siblings('input[name=group-members]').val().split(' ');
$(this).parent().remove();
removeElement(members, toRemove);
members = members.join(' ');
$(this).parent().siblings('input[name=group-members]').val(members);
});
In the above, everything works until the last line (setting the value to the string contained in members
). Displaying the variable members
in the console displays the expected string, signifying that $(this).parent().siblings('input[name=group-members]')
is traversing the DOM correctly. My HTML is below:
<form method='POST' action='action.php'>
<input type='text' value='[ GROUP NAME GOES HERE ]' name='group_name' />
<input type='text' name='add-member' />
<div class='group_member'>name01<span class='remove-member'>x</span>
</div>
<div class='group_member'>name02<span class='remove-member'>x</span>
</div>
<div class='group_member'>name03<span class='remove-member'>x</span>
</div>
<div class='group_member'>name04<span class='remove-member'>x</span>
</div>
<input type='text' value='name01 name02 name03 name04' name='group-members' />
<input type='Submit' value='Update' />
</form>
Directly referencing $('input[name=group-members]')
is not an option due to the nature of the page.
removeElement function:
function removeElement(arr) {
var what, a = arguments,
L = a.length,
ax;
while (L > 1 && arr.length) {
what = a[--L];
while ((ax = arr.indexOf(what)) !== -1) {
arr.splice(ax, 1);
}
}
return arr;
}
Upvotes: 0
Views: 904
Reputation: 672
$('.remove-member').click(function () {
var toRemove = $(this).parent().text().slice(0, -1);
var members = $(this).parent().siblings('input[name=group-members]').val().split(' ');
$(this).parent().remove();
removeElement(members, toRemove);
members = members.join(' ');
$(this).parent().siblings('input[name=group-members]').val(members);
});
You are removing the parent..
$(this).parent().remove();
So the call..
$(this).parent().siblings('input[name=group-members]').val(members);
Shouldn't work anymore because you just killed the containing DOM node.
Upvotes: 2