San*_*ine 10 html javascript checkbox equality
所以我有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);
}Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
当我单击一个复选框时,它将添加到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);
}
Run Code Online (Sandbox Code Playgroud)
Rin*_*haj 10
第一次迭代:
由于状态列表为空,因此您要添加5,
第二次迭代:
statulsList = [5]
您要添加8,所以现在statusList的值为[5,8],这意味着长度也为2,
因此,我们进行了第三次迭代,在这种情况下为8 === 8。
如果您想让它有所不同,请在添加其他项目之前,先保存状态列表的长度。
var statusList = [];
function updateStatusString(x) {
if (statusList != null) {
if (statusList.length > 0) {
var lengthStat = statusList.length;
for (var i = 0; i < lengthStat; i++) {
if (parseInt(statusList[i]) == parseInt(x)) {
statusList[i] = 123;
} else {
if(! (statusList.indexOf(x) != -1))
statusList.push(x);
}
}
} else {
statusList.push(x);
}
}
alert(statusList);
}Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
因为您正在遍历statusList。在第一次迭代中,你是否5 == 8,然后移动到其他部分和插入8在statusList。您的statusList为= [5,8]。对于下一次迭代,这statuslist[i]将是8和8 === 8,并且您的语句- statusList[i] = 123;将用替换最后插入的8值123。因此,您的statusList数组将具有["5", 123]。
var statusList = [];
function updateStatusString(x) {
const input = parseInt(x);
if (statusList != null) {
if (statusList.includes(input)) {
const idx = statusList.indexOf(input);
statusList[idx] = 123;
} else {
statusList.push(input);
}
alert(statusList);
}
}Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)