2009-08-20 192 views
0

我已經寫了一些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; 
        } 
       }); 
      }); 
     }); 

回答

3

如何寫這樣的事情:

$(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

-2

嘗試在您的代碼中具體。取而代之的if (objValue.checked)if (ojValue.checked == true)

+0

如果複選框被選中objValue.checked爲true。添加== true只是不需要的額外代碼。 – nickytonline 2009-08-20 18:03:49

0

這真奇怪,它會落入你的條件塊即使條件是假的。你可以嘗試只選擇檢查項目開始說起:

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

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

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 
+0

你不應該這麼做:單選複選框,因爲它等同於*:複選框,你應該總是在輸入前加上 – 2009-08-20 16:27:42

+0

現在更新。乾杯 – 2009-08-20 16:30:35