我有一个JavaScript脚本,我在其中向元素(id,value)添加元素,然后我从它们创建复选框。它背后的想法是允许用户选择一项运动,它显示为一个复选框并取消选中它,它会从屏幕上消失。因此,当页面加载时,已经选择了一些运动,这意味着用户无法再次添加它们,但可以删除它们中的任何一项并再次添加。我的问题是,当我删除它时,从数据库中添加了第一个,我无法再添加它;我已经在脚本中添加了警告消息,并且脚本告诉我它确实在被删除时没有删除。我做错了什么?
<script type='text/javascript'>
//<![CDATA[
$(window).load(function () {
var db = [{ id: 6, value: "Running"},{ id: 1, value: "Baseball" }];
var allVals = [];
$.each(db, function (k, v) {
$("#results").append("<label class=\"wList\"><input checked=\"checked\" class=\"wList-chk\" name=\"wList[]\" type=\"checkbox\" value=\""
+ v.id
+ "\">"
+ v.value
+ "</label>");
allVals.push(v.id);
});
$(function () {
var sports = [{ id: 1, value: "Baseball" },
{ id: 2, value: "Soccer" },
{ id: 3, value: "Basketball" },
{ id: 4, value: "Volleyball" },
{ id: 5, value: "Tennis" },
{ id: 6, value: "Running" },
{ id: 7, value: "Swimming"}];
$("#sports").autocomplete({
source: sports,
select: function (event, ui) {
if ($.inArray(ui.item.id, allVals) == -1) {
allVals.push(ui.item.id);
$("#results")
.append("<label class=\"wList\"><input checked=\"checked\" class=\"wList-chk\" name=\"wList[]\" type=\"checkbox\" value=\""
+ ui.item.id
+ "\">"
+ ui.item.value
+ "</label>");
$('input.wList-chk[type="checkbox"][value="' + ui.item.id + '"]').parent().effect('highlight', {}, 1500);
ui.item.value = "";
}
else {
//ALERT TO SEE IF ELEMENT IS STILL IN ARRAY
alert("item already in ... but should not be in");
ui.item.value = "";
$('input.wList-chk[type="checkbox"][value="' + ui.item.id + '"]').parent().effect('highlight', {}, 1500);
}
}
});
});
$(document).on("change", ".wList-chk", function () {
if ($(this).attr('checked')) {
return;
} else {
var thisVal = $(this).val();
var index = $.inArray(thisVal, allVals);
allVals.splice(index, 1);
$(this).parent('.wList').remove();
}
});
});//]]>
</script>
这是一个完整的jsfiddle:http://jsfiddle.net/hdfse/
答案 0 :(得分:2)
var thisVal = $(this).val();
应改为
var thisVal = parseInt($(this).val());
由于$(this).val()
返回string
,而var index = $.inArray(thisVal, allVals);
,index
将获得-1
,然后allVals.splice(index, 1);
将删除意外的项目。
这是jsfiddle http://jsfiddle.net/hdfse/8/