请您看一下下面的演示让我知道如何根据项目ID强制Javascript将项目推送到数组中?
var theArray = [
["A", "B", "C"],
["D", "E"],
["F", "G", "H", "I"],
["J"],
["K", "L", "M"]
];
var res = theArray.toString();
$('#textarea').text(res);
$("input[name='m1']").change(function () {
if ($(this).is(':checked')) {
var id=$(this).attr('id');
var selected = $(this).val();
theArray[1][id] = selected;
} else {
var itemtoRemove = $(this).val();
theArray[1].splice($.inArray(itemtoRemove, theArray[1]),1);
}
var res = theArray.toString();
$('#textarea').text(res);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<br />
<textarea id="textarea" rows="2" cols="100"></textarea>
<br />
<br />
<fieldset>
<legend>Items</legend>
<input type="checkbox" id="1" name="m1" value="mItem1" />mItem 1
<br />
<input type="checkbox" id="2" name="m1" value="mItem2" />mItem 2
<br />
<input type="checkbox" id="3" name="m1" value="mItem3" />mItem 3
<br />
<br />
</fieldset>
正如您所看到的那样,如果您从mItem 3
取消选中mItem 3
,但是如果您先取消选中mItem 1
并再次检查它,则会覆盖该数组中的mitem2集会!)
能告诉我如何解决这个问题吗?
答案 0 :(得分:0)
我不明白这样一个申请的目的,但如果我理解你的情况,这就是原因。
最初数组是[“D”,“E”]。
检查mItem3时,它变为[“D”,“E”,“”,“mItem3”]。 JS在索引2处添加一个空项,因为您在索引3处插入。
取消选中mItem3时,数组becoms [“D”,“E”,“”]。
检查mItem2,然后检查[“D”,“E”,“mItem2”]。
检查mItem1,然后它将替换索引1处的元素 - &gt; [“D”,“mItem1”,“mItem2”]。
取消选中mItem1将删除mItem1(在索引1处) - &gt; [“D”,“mItem2”]。
我想,现在一切都好了。
这里出现了问题。
当你再次检查mItem1时,它会替换索引1处的值为“mItem2”的项目。因此,数组自然变为[“D”,“mItem1”]。