当我通过复选框迭代并在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>";
我给了他们两个不同的ID,所以我可以在这里执行一些逻辑:
var filterString = "";
var type_filter = "";
$(":checkbox").each(function(index, element) {
if($(this).is(':checked'))
{
if(document.getElementById("nssConfirmed").checked)
{
type_filter = "C";
filterString += "site_status in ('" + type_filter + "')";
}
else if (document.getElementById("nssReserved").checked)
{
type_filter = "R";
filterString += "site_status in ('" + type_filter + "')";
}
else if (document.getElementById("nssConfirmed").checked && document.getElementById(""nssReserved"))
{
type_filter = "1=1";
filterString += "site_status in ('" + type_filter + "')";
}
else
{
type_filter = "1=1";
filterString += "site_status in ('" + type_filter + "')";
}
}
});
我的情况是:
然而,当我尝试调试时,它会跳过每个复选框的迭代过程,并为filterString返回null。当我尝试使用if和else语句而没有迭代通过复选框来实现它时,它正在工作。
我想知道为什么会这样。提前谢谢。
答案 0 :(得分:0)
因为你并没有真正使用你的循环并且正在查找 id ,所以你可以通过删除未使用的循环并缓存查找来大大缩短你的代码。
此外,您对confirmed && reserved
的检查需要 检查confirmed
和之前检查reserved
if..else
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 + "')";