在JavaScript中迭代通过复选框

时间:2014-03-29 11:32:52

标签: javascript checkbox

当我通过复选框迭代并在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 + "')";
        }           
    }
});

我的情况是:

  • 如果仅检查nssConfirmed,则filterString应为(“C”)中的site_status
  • 如果仅检查nssReserved,则filterString应为(“R”)中的site_status
  • 如果没有选中它们,则filterString应为site_status in(“1 = 1”)

然而,当我尝试调试时,它会跳过每个复选框的迭代过程,并为filterString返回null。当我尝试使用if和else语句而没有迭代通过复选框来实现它时,它正在工作。

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

1 个答案:

答案 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 + "')";