【发布时间】:2019-10-25 16:31:36
【问题描述】:
所以我有 2 个复选框:
var statusList = [];
function updateStatusString(x) {
if (statusList != null) {
if (statusList.length > 0) {
for (var i = 0; i < statusList.length; i++) {
if (parseInt(statusList[i]) == parseInt(x)) {
statusList[i] = 123;
} else {
statusList.push(x);
}
}
} else {
statusList.push(x);
}
}
alert(statusList);
}
<label> <input type="checkbox" name="Active" value="5" onchange=updateStatusString("5")> "Active"</label>
<label> <input type="checkbox" name="NonActive" value="8" onchange=updateStatusString("8")> "Active"</label>
当我点击一个复选框时,它会将它添加到 JavaScript 列表中,如果它已经在列表中,我想用另一个值(在本例中为 123)覆盖它。
但是当我点击第二个时(不管顺序,第二个元素由于某种原因总是123。
如果我单击顶部的复选框,我希望它会是一个包含“5”的列表,然后单击第二个复选框,我希望它是 5,8,但它会以5,123 提醒,不要真的明白为什么要这样做,因为5==8 是错误的......有什么想法吗?
更新算法以解决潜在问题:
万一有人发现这很有用,我将算法更改为更好的替代方案:
var statusList = [];
function updateStatusString(x) {
if (statusList.length > 0) {
if (statusList.includes(x)) {
var idx = statusList.indexOf(x);
if (idx != -1) {
statusList.splice(idx, 1);
}
}
else {
statusList.push(x);
}
} else {
statusList.push(x);
}
alert(statusList);
}
【问题讨论】:
-
您的算法也包含错误(可能)。它将为数组中的每个非 x 添加 x 到列表中,一旦到达 forloop 的末尾,它将变成 123。 (数组 [1,2,3,4,5] 检查 x=6 将首先变成 [1,2,3,4,5,6,6,6,6,6] (i = 5) 然后进入 [1,2,3,4,5,123,123,123,123,123] (i = 10))
-
我同意@recurringError。您推送或替换的循环的每个索引,因此列表中的越多,添加的越多。还想补充一点,即使有 2 个按钮,列表也会随着点击次数的增加而增长(即使你的现金价值左右),因为如果你第三次点击 8,它不会只找到 123,所以会再添加 8。
-
@JohanSellberg 是的,在看到突出显示的答案的逻辑谬误之后,我们采用了另一种方法。
标签: javascript html checkbox equality