【问题标题】:JQuery if statementjQuery if 语句
【发布时间】:2010-11-21 09:28:04
【问题描述】:

我已经编写了一些 JQuery 代码来遍历 ASP.Net 网页上的一些复选框,并且发现 $.each 函数中嵌入的 if 语句存在 2 个非常奇怪的问题。代码很好地选择了我的复选框,并且当代码遍历 $.each 函数时,我可以清楚地看到 objValue.checked 是真还是假,这取决于我是否选中了复选框。我看到的问题是:1)它总是落入我的 if 语句中(即使 objValue.checked 的值为 false),以及 2)我的 availableInstalls 变量的值永远不会减少,即使我可以看到它命中“availableInstalls = availableInstalls - 1”代码行的调试模式。有谁知道可能导致这种行为的原因是什么?

      $(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;
                  }
              });
          });
      });

【问题讨论】:

    标签: c# asp.net jquery iteration


    【解决方案1】:

    写这样的东西怎么样:

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

    【讨论】:

    • 选择器会起作用,但它实际上应该是 input:checkbox:checked , :checked 将查看上下文中的每个元素,这可能非常低效。您可以使用 input:checkbox 将其过滤为复选框 - 大多数时候这可能没什么大不了的,但这只是一个好习惯。
    • 正如我在另一条评论中所写的,我同意你的观点,并且我已经编辑了我的答案。就个人而言,我认为速度方面并不重要,但它还可以计算单选按钮元素这一事实在将来修改 HTML 时可能会出现错误。
    • 感谢您更新您的答案。 +1 :)
    • 嗯,在大多数情况下,速度方面并不重要,但这是一个好习惯。我的意思是,如果“.installsoftwarecb”恰好是一个相当大的 div,有 100 个元素,其中只有 10 个是复选框,那么迭代 100 个元素以查看它们是否被选中是没有意义的。你的用户的浏览器会死吗?不。但是有一个更好的、同样简单的替代方案,所以不使用它是没有意义的。
    【解决方案2】:

    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
    

    【讨论】:

    • 你不应该单独做:checkbox,因为它等同于*:checkbox,你应该总是在它前面加上input
    【解决方案3】:

    即使条件为假,它也会落入您的条件块中,这真的很奇怪。您可以尝试只选择选中的项目开始:

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

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

    【讨论】:

      【解决方案4】:

      我认为你应该使用 jQuery.each 而不是 $().each。 (http://docs.jquery.com/Utilities/jQuery.each)。 $().each 不接受回调,而 jQuery.each 则接受。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 如果复选框被选中,objValue.checked 为真。添加 == true 只是不需要的额外代码。
        猜你喜欢
        • 1970-01-01
        • 2013-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-23
        相关资源
        最近更新 更多