【发布时间】:2015-03-04 05:14:41
【问题描述】:
$('.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);
});
在上面,一切正常,直到最后一行(将值设置为包含在members 中的字符串)。在控制台中显示变量 members 会显示预期的字符串,表示 $(this).parent().siblings('input[name=group-members]') 正在正确地遍历 DOM。我的 HTML 如下:
<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>
由于页面的性质,不能直接引用$('input[name=group-members]')。
removeElement 函数:
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;
}
【问题讨论】:
-
您是否尝试过将
$(this).parent().siblings('input[name=group-members]')输出到控制台以确保jQuery 找到您期望的元素? -
是的,正在找到预期的元素。
-
看看this question of mine - 它可能是相关的。
-
@Firedrake969 你也可以分享
removeElement函数吗? -
@Firedrake969 - 这是一个好的开始。您是否还验证了
members包含预期值?我发现当设置表单值之类的基本操作不配合时,您必须测试您的假设。例如,我是否试图改变正确的事情,我是否使用了我期望使用的值?
标签: javascript jquery html