Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]2234[/thread]

Values mehrerer Checkboxen addieren? (Seite 2)

Leser: 14


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
Gast neuling
 2016-02-13 10:53
#183843 #183843
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript">
function addValues(){
var sum = 0;
for(var i = 0; i < document.forms[0].length; ++i){
if(document.forms[0].elements[i].type == "checkbox" && document.forms[0].elements[i].checked){
sum += (document.forms[0].elements[i].value * 1);
}
}
document.forms[0].ausgabe.value = sum;
}
</script>


Würde jemand mal erklären, warum die for-Schleife nicht endet, obwohl ja bei jedem Durchgang, also bei jedem Anklicken einer Checkbox der Wert 1 durch "++i" zum Initialwert addiert wird? Müsste der Initialwert dann nicht irgendwann größer sein als "document.forms[0].length" und so die Schleife enden und somit keine Berechnung mehr möglich sein?
"document.forms[0].length" bestimmt doch die Anzahl aller Elemente des ersten formulars, oder?

Wahrscheinlich mache ich da einen Denkfehler...
Last edited: 2016-02-13 11:39:56 +0100 (CET)
bianca
 2016-02-13 12:15
#183846 #183846
User since
2009-09-13
6977 Artikel
BenutzerIn

user image
Mal document.forms[0].childNodes.length versucht?
Last edited: 2016-02-13 12:17:46 +0100 (CET)
10 print "Hallo"
20 goto 10
Gast janus
 2016-02-14 08:24
#183871 #183871
2016-02-13T11:15:30 bianca
Mal document.forms[0].childNodes.length versucht?


Besser: document.forms.elements

so hast Du .name und .type im direkten Zugriff. Noch besser ist natürlich valides html und ein zweckdienlicher Einsatz des Markup.
Last edited: 2016-02-14 08:34:46 +0100 (CET)
Gast neuling
 2016-02-14 11:38
#183876 #183876
Vielen Dank für die Antworten.
Es ging bei meiner Frage eigentlich um eine Erklärung des Codes, also darum, eine Antwort darauf zu finden, warum es beim praktischen Einsatz im Browser den Anschein hat, dass

Quote
die for-Schleife nicht endet, obwohl ja bei jedem Durchgang, also bei jedem Anklicken einer Checkbox der Wert 1 durch "++i" zum Initialwert addiert wird? Müsste der Initialwert dann nicht irgendwann größer sein als "document.forms[0].length" und so die Schleife enden und somit keine Berechnung mehr möglich sein?

Last edited: 2016-02-14 11:44:54 +0100 (CET)
Linuxer
 2016-02-14 12:37
#183878 #183878
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Ist es denn so oder hat es nur den Anschein? Was lässt Dich annehmen, dass die Schleife nicht endet? Ich kann das jedenfalls so nicht nachvollziehen. Werde doch bitte mal genauer. Idealerweise mit einem vollständigen Code-Beispiel, damit man das nachvollziehen kann.

edit: +vollständigen
Last edited: 2016-02-14 13:43:04 +0100 (CET)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
GwenDragon
 2016-02-14 12:47
#183879 #183879
User since
2005-01-17
14533 Artikel
Admin1
[Homepage]
user image
Code (html): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<html>
  <body>
        <script type="text/javascript">
  function addValues(){
    var sum = 0;
    for(var i = 0; i < document.forms[0].length; ++i){
      if(document.forms[0].elements[i].type == "checkbox" && document.forms[0].elements[i].checked){
        sum += (document.forms[0].elements[i].value * 1);
      }
    }
    document.forms[0].ausgabe.value = sum;
  }
  </script>
        <form onclick="addValues()">
        <input type="checkbox" name="f1" value="1">
        <input type="checkbox" name="f2" value="12">
        <input type="checkbox" name="f3" value="13">
        Summe: <input type="text" name="ausgabe">
        </form>
  </body>
</html>


Funktioniert wunderbar.

Es gibt übrigens in jedem Browser ein Debugging-Tool, das mit F12 aufzurufen ist.
Da kannst du im Javascript Breakpoints setzen, schrittweise ablaufen lassen, und dabei Variablen/Objekte/etc. inspizieren.
Last edited: 2016-02-14 12:49:37 +0100 (CET)
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Gast neuling
 2016-02-14 14:16
#183880 #183880
Ja, das Beispiel von GwenDragon funktioniert klasse. Mein Problem ist dabei zu verstehen, warum es so funktioniert.

Auf das Beispiel bezogen:

Ist es nicht so, dass sobald ich in dem Formular im Browser eine Checkbox anwähle, die for-Schleife einmal durchlaufen wird und sich im Zuge dessen der Initialwert der Schleife um den Wert 1 erhöht?

Wenn das jedes Mal beim Anwählen einer Checkbox passiert, also immer der Wert 1 zum Initialwert addiert wird (der Wert also nach einem Klick "1", nach dem zweiten "2" und nach dem dritten Klick "3" ist...), müsste dann der Initialwert nicht irgendwann genauso groß sein, wie die Anzahl an Elementen,
Code: (dl )
document.forms[0].length
im Formular(im Bsp. 4)?

Wenn das so wäre, würde die Schleife doch ab einem gewissen Punkt, also hier nach drei Klicks auf unterschiedliche Checkboxen, enden und somit wäre keine weitere Berechnung möglich.

Oder fängt die Schleife bei jeder erneuten Anwahl einer Checkbox wieder beim Initialwert 0 an zu zählen und der Wert i bleibt in GwenDragons konkretem Beispiel dadurch immer unter
Code: (dl )
document.forms[0].length
?
Last edited: 2016-02-14 15:25:48 +0100 (CET)
GwenDragon
 2016-02-14 15:32
#183881 #183881
User since
2005-01-17
14533 Artikel
Admin1
[Homepage]
user image
document.forms[0].length zählt nicht die Klicks sondern die Anzahl der HTML-Formular-Elemente im ersten Element der existierenden Formulare.


Die for-Schleife wird ja bei jedem Start weider neu von 0 anfangen, weil i auf 0 gesetzt wird.
https://wiki.selfhtml.org/wiki/JavaScript/Schleife...
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2005-01-25 18:00.