2009-08-20 2 views
0

Ich habe einige JQuery-Code geschrieben, um über einige Checkboxen auf einer ASP.Net-Webseite zu iterieren, und ich sehe 2 sehr seltsame Probleme mit der if-Anweisung in der $ .each-Funktion eingebettet. Der Code wählt meine Checkboxen gut aus, und wenn der Code durch die $ .each-Funktion iteriert, kann ich klar erkennen, dass objValue.checked richtig oder falsch ist, abhängig davon, ob ich das Kontrollkästchen aktiviert habe oder nicht. Die Probleme, die ich sehe, sind: 1) dass es immer in meine if-Anweisung fällt (selbst wenn der Wert von objValue.checked falsch ist), und 2) der Wert meiner availableInstalls-Variable wird nie dekrementiert, obwohl ich darin sehen kann Debug-Modus, der die Codezeile "availableInstalls = availableInstalls - 1" erreicht. Wer weiß, was dieses Verhalten verursacht?JQuery if-Anweisung

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

Antwort

3

Wie wäre es so etwas wie dieses schreiben:

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

Der Selektor wird funktionieren, aber es sollte wirklich eingegeben werden: checkbox: checked stattdessen,: checked wird jedes einzelne Element im Kontext betrachten, was ziemlich ineffizient sein kann. Sie können es auf Checkboxen mit Eingabe filtern: Checkbox - es ist wahrscheinlich die meiste Zeit keine große Sache, aber es ist nur eine gute Übung. –

+0

Wie ich in dem anderen Kommentar geschrieben habe, stimme ich dir zu und habe meine Antwort bearbeitet. Persönlich denke ich nicht, dass Geschwindigkeit es wirklich wichtig wäre, aber die Tatsache, dass es Radio-Button-Element zählen kann, ist ein Potenzial für Fehler, wenn der HTML-Code in der Zukunft geändert wird. – SolutionYogi

+0

Vielen Dank für die Aktualisierung Ihrer Antwort. +1 :) –

-2

Versuchen Sie, in Ihrem Code spezifisch zu sein. Statt if (objValue.checked) schreiben if (ojValue.checked == true)

+0

Wenn das Kontrollkästchen aktiviert ist, ist objValue.checked wahr. Das Hinzufügen von == true ist nur zusätzlicher Code, der nicht benötigt wird. – nickytonline

0

Das ist wirklich seltsam, dass es in Ihrem bedingten Block fallen würde, selbst wenn die Bedingung falsch war. Sie könnten versuchen, nur die markierten Elemente der Auswahl zu beginnen:

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

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

2

Working Demo

Code von Demo

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

      var availableInstalls = 10; 

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

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

oder Sie kalt nur verwenden eine "geprüft" Wahlschalter

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

Sie sollten nicht: Checkbox allein, wie es * entspricht: Kontrollkästchen, sollten Sie immer mit der Eingabe –

+0

Präfix vorangestellt werden Jetzt aktualisiert. Prost –