JQuery if语句

问题描述:

我已经写了一些JQuery代码来遍历ASP.Net网页上的一些复选框,并且发现嵌入在$ .each函数中的if语句有2个非常奇怪的问题。代码选择我的复选框就好了,当代码遍历$ .each函数时,我可以清楚地看到objValue.checked是true或false,具体取决于是否检查复选框。我看到的问题是:1)它总是落入我的if语句中(即使objValue.checked的值为false),2)我的availableInstalls变量的值永远不会递减,即使我可以看到调试模式,它击中“availableInstalls = availableInstalls - 1”行代码。任何人都知道可能会导致这种行为?JQuery if语句

 $(document).ready(function() { 
      $(".installsoftwarecb").click(function() { 

       var availableInstalls = 10; 

       var checkBoxes = $(".installsoftwarecb input[type='checkbox']"); 
       $.each(
       checkBoxes, function(intIndex, objValue) { 

        if (objValue.checked) { 
         availableInstalls = availableInstalls - 1; 
        } 
       }); 
      }); 
     }); 

如何写这样的事情:

$(document).ready(function() 
    { 
    $(".installsoftwarecb").click(function() 
    { 
     //count number of checked items directly. 
     var availableInstalls = 10 - $('input:checkbox:checked', this).length; 
     alert(availableInstalls); 
    } 
    } 
+1

选择器正在工作,但它应该是真正的输入:复选框:检查,而不是检查将检查上下文中的每个单元可能是非常低效的。您可以将其过滤为带有输入的复选框:复选框 - 大部分时间可能都不是什么大问题,但这只是一个好习惯。 – 2009-08-20 16:31:57

+0

正如我在其他评论中写的那样,我同意你和我编辑了我的答案。就个人而言,我认为速度并不重要,但它可以计算单选按钮元素的事实在将来修改HTML时可能会出现bug。 – SolutionYogi 2009-08-20 16:39:13

+0

谢谢你更新你的答案。 +1 :) – 2009-08-20 16:41:10

尝试在您的代码中具体。取而代之的if (objValue.checked)if (ojValue.checked == true)

+0

如果复选框被选中objValue.checked为true。添加== true只是不需要的额外代码。 – nickytonline 2009-08-20 18:03:49

这真奇怪,它会落入你的条件块即使条件是假的。你可以尝试只选择检查项目开始说起:

var checkBoxes = $(".installsoftwarecb input[type='checkbox']:checked"); 

http://docs.jquery.com/Selectors/checked

Working Demo

代码演示

$(document).ready(function() { 
     $("#button").click(function() { 

      var availableInstalls = 10; 

      $("input:checkbox").each(function() { 

       if (this.checked) { 
        availableInstalls = availableInstalls - 1; 
       } 
      }); 
      alert(availableInstalls); 
     }); 
    }); 

,或者你感冒只需使用一个 “检查”选择器

$("input:checkbox:checked").length; // number of checked checkboxes 
+0

你不应该这么做:单选复选框,因为它等同于*:复选框,你应该总是在输入前加上 – 2009-08-20 16:27:42

+0

现在更新。干杯 – 2009-08-20 16:30:35

我想你应该使用jQuery.each而不是$()。each。 (http://docs.jquery.com/Utilities/jQuery.each)。 $()。每个都不需要回调,jQuery.each就是这样做的。