Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的迭代通过复选框_Javascript_Checkbox - Fatal编程技术网

JavaScript中的迭代通过复选框

JavaScript中的迭代通过复选框,javascript,checkbox,Javascript,Checkbox,我目前在遍历复选框并在JavaScript中执行查询时遇到了一些逻辑问题。下面是我如何设置复选框的: content += "<tr><td><input id='nssConfirmed' class=\"nssConfirmed\" type=\"checkbox\" onclick=\"queryNSS()\">Confirmed</td></tr>"; content += "<tr><td><in

我目前在遍历复选框并在JavaScript中执行查询时遇到了一些逻辑问题。下面是我如何设置复选框的:

content += "<tr><td><input id='nssConfirmed' class=\"nssConfirmed\" type=\"checkbox\" onclick=\"queryNSS()\">Confirmed</td></tr>";
content += "<tr><td><input id='nssReserved' class=\"nssReserved\" type=\"checkbox\" onclick=\"queryNSS()\">Reserved</td></tr>";
我的情况是:

如果仅选中nssConfirmed,则filterString应为C中的site_状态 如果仅选中NSSReeved,则filterString应为R中的site_状态 如果未选中任何一个或两个,则filterString应为site_status in 1=1 但是,当我尝试调试时,它跳过了迭代每个复选框并为filterString返回null的过程。当我尝试只使用if和else语句而不使用iterate-thru复选框来实现它时,它正在工作


我不知道为什么会这样。提前感谢。

因为您没有真正使用循环,而是通过id查找,所以可以通过删除未使用的循环并缓存查找来大大缩短代码。 此外,在if..else结构中,需要在检查确认和保留之前检查确认和保留,否则将永远无法到达。您发布的代码中也有语法错误,请注意问题中代码的颜色

var filterString = "",
    type_filter = "",
    confirmed = document.getElementById("nssConfirmed").checked,
    reserved = document.getElementById("nssReserved").checked;
if (confirmed && reserved) {
    type_filter = "1=1";
} else if (confirmed) {
    type_filter = "C";
} else if (reserved) {
    type_filter = "R";
} else {
    type_filter = "1=1";
}
filterString += "site_status in ('" + type_filter + "')";

如果语法有误,请勾选“第二个否则”。下面的代码路径看起来像是在执行循环,在循环中查找每个节点,因此无论页面上有多少次复选框,您都在重复自己。此外,如果a{}else如果b{}else如果a&&b{/*这将永远不会达到,并且应该在if a和if b*/}else{}之前,是否有更好的方法来修改这部分代码?因为我每次都需要循环检查每个复选框来检查语句。我以前用if-else做过,它是这样工作的:如果我检查nssConfirmed,它会返回我C。我再次检查nssreressed和checked nssConfirmed,它只返回我R,而不是1=1
var filterString = "",
    type_filter = "",
    confirmed = document.getElementById("nssConfirmed").checked,
    reserved = document.getElementById("nssReserved").checked;
if (confirmed && reserved) {
    type_filter = "1=1";
} else if (confirmed) {
    type_filter = "C";
} else if (reserved) {
    type_filter = "R";
} else {
    type_filter = "1=1";
}
filterString += "site_status in ('" + type_filter + "')";