【发布时间】:2022-04-05 16:28:59
【问题描述】:
每当单击 x 按钮时,我试图手动从 bootstrap-tags-input 中删除输入值,但值既不会从 array 也不会从 inputs 更改。
这是我尝试过的代码:
$('input').tagsinput({
allowDuplicates: true
});
//on click of remove button
$(document).on("click", ".label-info span[data-role=remove]", function() {
//remove that spn
var to_remove = $(this).closest(".label-info").clone().children().remove().end().text().trim()
console.log($("[name=tags]").val())
//if i put here inisde split `,` not working as well
var values = $("[name=tags]").val().split(';')
console.log("to remove ---" + to_remove)
$(this).closest(".label-info").remove()
console.log("input box values--" + $("[name=tags]").val())
for (var i = 0; i < values.length; i++) {
if (values[i] == to_remove) {
values.splice(i, 1);
return true;
}
}
console.log("after splice--" + values)
$(this).closest(".label-info").remove()
$("[name=tags]").val(values)
console.log("After setting new values--" + $("[name=tags]").val())
})
$('input').on('beforeItemRemove', function(e) {
e.cancel = true; //set cancel to false..
});
.label-info {
background-color: #17a2b8;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha256-aAr2Zpq8MZ+YA/D6JtRD3xtrwpEz2IqOS+pWD/7XKIw=" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-tagsinput/0.8.0/bootstrap-tagsinput.css" integrity="sha512-xmGTNt20S0t62wHLmQec2DauG9T+owP9e6VU8GigI0anN7OXLip9i7IwEhelasml2osdxX71XcYm6BQunTQeQg==" crossorigin="anonymous"
/>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha256-OFRAJNoaD8L3Br5lglV7VyLRf0itmoBzWUoM+Sji4/8=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-tagsinput/0.8.0/bootstrap-tagsinput.js" integrity="sha512-VvWznBcyBJK71YKEKDMpZ0pCVxjNuKwApp4zLF3ul+CiflQi6aIJR+aZCP/qWsoFBA28avL5T5HA+RE+zrGQYg==" crossorigin="anonymous"></script>
<input type="text" data-role="tagsinput" name="tags" class="form-control">
我认为我从输入框中得到的值不正确,即:格式不正确,因为当我在拆分后执行values.length 时,它总是给出1 的值。
编辑 1:
我尝试使用split(','),它正在从数组中删除数据,但在 for 循环代码和输入框中的值之后不打印任何 console 结果也不是remove。
更新代码:
$(document).on("click", ".label-info span[data-role=remove]", function() {
var to_remove = $(this).closest(".label-info").clone().children().remove().end().text().trim()
console.log($("[name=tags]").val())
var values = $("[name=tags]").val().split(',')
console.log("to remove ---" + to_remove)
$(this).closest(".label-info").remove()
console.log("input box values--" + $("[name=tags]").val())
for (var i = 0; i < $("[name=tags]").val().split(',').length; i++) {
if (values[i] == to_remove) {
values.splice(i, 1);
console.log("i am in")
return;
}
}
//why thse consoles do not get printed ??
console.log("after splice--" + values)
$(this).closest(".label-info").remove()
$("[name=tags]").val(values)
console.log("After setting new values--" + $("[name=tags]").val())
})
感谢您的帮助。
【问题讨论】:
-
为什么要在for循环中返回。它退出功能。如果你想退出 for 循环,你应该使用 break。请检查我的答案。
标签: javascript html jquery bootstrap-tags-input