Итак, у меня есть 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 в этом примере).
Но когда я щелкаю по второму (не имеет значения порядок, по каким-то причинам 2-й элемент всегда равен 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);
}