• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Addition von Variablen funktioniert nicht?

jacky

New member
Hallo,

vor kurzem habe ich hier das Problem mit dem Zuweisen an einzelne Formularfelder gehabt und gelöst. Jetzt möchte ich einfach mehrere Zahlenwerte aus den Formularfeldern addieren und wieder ausgeben. Komisch, denn die Zahlen werden wie strings behandelt und aneinandergefügt, z.B. 2+3=23. Subtraktion und Multiplikation geht jedoch. Kann mir das jemand erklären?

Code:
function summe_R()
		{
		var R1= window.document.forms[2].elements['R1'].value;
		var R2= window.document.forms[2].elements['R2'].value;
		var R3= window.document.forms[2].elements['R3'].value;
		var R4= window.document.forms[2].elements['R4'].value;
		var R5= window.document.forms[2].elements['R5'].value;
		var ziel=R1+R2+R3+R4+R5;
		
		window.document.forms[2].elements['R-Wert'].value=ziel;
		}

?????
Jacky
 
probier das mal

PHP:
function summe_R() 
{ 
var R1= window.document.forms[2].elements['R1'].value; 
var R2= window.document.forms[2].elements['R2'].value; 
var R3= window.document.forms[2].elements['R3'].value; 
var R4= window.document.forms[2].elements['R4'].value; 
var R5= window.document.forms[2].elements['R5'].value; 
var temp=R1+R2+R3+R4+R5; 
var ziel = parseInt (temp);

window.document.forms[2].elements['R-Wert'].value=ziel; 
}
 
Fehlanzeige

Hallo .colin,

danke für die Antwort, aber leider Fehlanzeige, es wird nur nebeneinander geschrieben. Ausserdem kommt bei der Addition von Dezimalzahlen eine 0 und sonst nix.
Hier noch das html dazu:
U-Wert

Ich frag mich vor allem, warum die anderen Rechenoperationen funktionieren, und das + ist ja ein arithmetischer Operator!

Gruss
Jacky
 
Also ich denke parseInt sollte helfen, allerdings wird es hier (@.colin) falsch angewandt. Nicht nach der Addtion sondern vor oder während der Addition ist es notwendig aus den Strings der Eingabefelder eine Zahl zu machen.
Mein Vorschlag:
var temp=parseInt(R1)+parseInt(R2)+parseInt(R3)+parseInt(R4)+parseInt(R5); 

So sollten nur Zahlen addiert werden und das Ergebis numerisch korrekt dargestellt werden.

Zum Operator: + ist je nach darunterliegendem Datentyp ein arithmetischer oder ein Zeichenkettenoperator. Wenn die Operanden Zeichenketten sind (bzw. nur einer reicht), dann wird eine Zeichenkettenoperation daraus.
 
Vielleicht lag das daran, dass ich da was vertauscht hab :)
PHP:
function summe_R() 
{ 
var R1= parseFloat (window.document.forms[2].elements['R1'].value); 
var R2=parseFloat (window.document.forms[2].elements['R2'].value); 
var R3= parseFloat (window.document.forms[2].elements['R3'].value); 
var R4=parseFloat  (window.document.forms[2].elements['R4'].value); 
var R5= parseFloat (window.document.forms[2].elements['R5'].value); 

window.document.forms[2].elements['R-Wert'].value=ziel; 
}

(man sollte das auch vor dem Addieren Umwandeln und nciht danach....)

Du musst noch drauf achten, dass die Kommazahlen kein Komma (,) sondern einen Punkt (.) haben.
 
da war der Albu wohl schneller, ich hab nur nebenbei noch was anderes geguckt und festgestellt das man PraseInt nicht nehmen sollte sondern lieber PraseFloat (weil wegen Dezimalzahlen)
 
immernoch nicht

Hallo Albu und auch .colin,

leider gehts nicht, auch mit parseFloat nicht, es zeigt NaN (Not a Number):

Code:
function summe_R()
		{
var R1= parseFloat (window.document.forms[2].elements['R1'].value); 
              var R2=parseFloat (window.document.forms[2].elements['R2'].value); 
              var R3= parseFloat (window.document.forms[2].elements['R3'].value); 
              var R4=parseFloat  (window.document.forms[2].elements['R4'].value); 
              var R5= parseFloat (window.document.forms[2].elements['R5'].value); 

		var ziel=R1+R2+R3+R4+R5;  
  
		window.document.forms[2].elements['R-Wert'].value=ziel;
		}
Keinen Schimmer wieso, denn laut Buch müsste das mit parseFloat hinhauen.

Jacky:mad:
 
das liegt daran, dass nicht alle Felder ausgefüllt sind, denn wenn ich alle Felder ausfüllen lasse, dann klappt das. Evtl. musst Du eine Abfangschleife einbauen so was wie


for (i=1; i <= 5; i++)
{
if (window.document.forms[2].elements['R2'].value != '')

var R =parseFloat (window.document.forms[2].elements['R'].value);

else R = 0;
}

so was in der Art muss das sein.
 
Danke

Hallo .colin,

prima, darauf hätte ich ja auch selbst kommen können, bei meinen heutigen Versuchen hab ich das sogar ein paar Mal gemacht, nur jetzt nicht...

Das mit der Schleife werde ich mal versuchen, bin leider kein Programmier-freak und muss dann immer viel rumbasteln, aber ich bin froh, dass es jetzt klappt.
Nochmal danke und schönes Wochenende, bin jetzt offline.

Gruss aus ZH
Jacky:)
 
for Schleife geht noch nicht

Hallo .colin,

habe wirklich vieles probiert mit der Schleife, aber sie wird wohl ignoriert, oder das Skript funktioniert erst gar nicht, oder alles ist plötzlich auf 0 in den Formularfeldern. Vielleicht könnte mir doch noch jemand helfen; bei mir ist das nur ein Herumgestochere. Anscheinend muss es ['R'+ heissen und die Variable R wird als Initialisierung auch nicht akzeptiert, daher bin ich auf 'Eingabe' ausgewichen.
Hier das Skript:
Code:
function summe_R()
		{
		var i, Eingabe;
		for (i=1; i <= 5; i++) 
                          { 
                          Eingabe =window.document.forms[2].elements['R'+[i]].value;
                          
                          if (Eingabe != null) 
					 {
window.document.forms[2].elements['R'+[i]].value=Eingabe;
					 }

                          else 
                          		{
                          		window.document.forms[2].elements['R'+[i]].value =0; }
                          		} 
		
var R1= parseFloat (window.document.forms[2].elements['R1'].value); 
var R2=parseFloat (window.document.forms[2].elements['R2'].value); 
var R3= parseFloat (window.document.forms[2].elements['R3'].value); 
var R4=parseFloat  (window.document.forms[2].elements['R4'].value); 
var R5= parseFloat (window.document.forms[2].elements['R5'].value); 
		
		var ziel=R1+R2+R3+R4+R5;  
  
		window.document.forms[2].elements['R-Wert'].value=ziel;
		}

Gruss
Jacky:mad:
 
hi jacky,

Code:
function summe_R() 
{ 
var R1= window.document.forms[2].elements['R1'].value; 
var R2= window.document.forms[2].elements['R2'].value; 
var R3= window.document.forms[2].elements['R3'].value; 
var R4= window.document.forms[2].elements['R4'].value; 
var R5= window.document.forms[2].elements['R5'].value; 
var ziel= [color=blue]eval(R1+R2+R3+R4+R5);[/color]

window.document.forms[2].elements['R-Wert'].value=ziel; 
}
 
leider nix

Hallo René,

leider kommt mit Deinem Code keine Addition zustande, das liegt daran, dass die Anführungsstriche in der Klammer nach eval fehlen. Bei unvollständigem Ausfüllen kommt immernoch NaN, d.h. es ist kein Unterschied, ob mit oder ohne eval, oder sehe ich das falsch:
Code:
function summe_R()
		{
		
		var R1= parseFloat (window.document.forms[2].elements['R1'].value); 
              var R2=parseFloat (window.document.forms[2].elements['R2'].value); 
              var R3= parseFloat (window.document.forms[2].elements['R3'].value); 
              var R4=parseFloat  (window.document.forms[2].elements['R4'].value); 
              var R5= parseFloat (window.document.forms[2].elements['R5'].value); 

		var ziel=eval("R1+R2+R3+R4+R5");  
  
		window.document.forms[2].elements['R-Wert'].value=ziel;
		}

Wie kann ich den leer gebliebenen Feldern nun eine Null zuweisen, sei es als Zahl oder als string, wäre eigentlich egal. Irgendwie geht das nicht, aber es müsste doch (einfach) möglich sein.
Vielen Dank schon mal

Jacky:confused:
 
hi jacky,

hat sonst mit dem eval(); immer funktioniert ;)

Code:
<html>
<head>

<script language="JavaScript" type="text/javascript">
<!--
function summe_R() {

var R1 = window.document.forms[2].elements['R1'].value;
var R2 = window.document.forms[2].elements['R2'].value;
var R3 = window.document.forms[2].elements['R3'].value;
var R4 = window.document.forms[2].elements['R4'].value;
var R5 = window.document.forms[2].elements['R5'].value;

test = new Array(R1,R2,R3,R4,R5);
ziel = 0;

for ( i = 0; i < test.length; ++i ) {

    if ( test[i] == "" || isNaN(test[i]) == true ) {
        test[i] = 0;
    } else {
        test[i] = parseFloat(test[i]);
    }

ziel += test[i];

}

window.document.forms[2].elements['R-Wert'].value = ziel;

}
//-->
</script>

</head>
<body>

<form>
</form>

<form>
</form>

<form>

<input name="R1" type="text" value="1"><br>
<input name="R2" type="text" value=""><br>
<input name="R3" type="text" value="3"><br>
<input name="R4" type="text" value="ü"><br>
<input name="R5" type="text" value="33"><br><br>


<input name="R-Wert" type="text" value=""><br><br>

<input type="button" value="Rechne" onClick="summe_R();">

</form>

</body>
</html>
 
Zuletzt bearbeitet:
super!!!

Hallo René,

vielen Dank, es klappt wunderbar, jetzt kann ich endlich weitermachen. Ich dachte wirklich dass es einfacher wäre, einem Feld den Wert 0 zuzuweisen, na ja.
Aus dieser numerischen Eingabe soll irgendwann eine graphische Ausgabe resultieren. Aber ich glaube noch nicht, dass das geht...

Viele Grüsse aus Zürich (30°C)
Jacky:)

Hier noch das fertige html mit dem letzten Javascriptteil, den ich soeben fertiggestellt habe:
U-Wert-Berechnung
U-Wert-Skript:
Code:
function rechneU()
		{
		var R=window.document.forms[2].elements['R-Wert'].value;
		var eins=1;
		var ziel=parseFloat (Math.round(1000*eins/R)/1000);
		if (R>1)
			{ziel='0'+ ziel;}

		window.document.forms[2].elements['U-Wert'].value=ziel;
		}
 
Zuletzt bearbeitet:
musste noch ergänzen

Hallo René,

danke für die Vereinfachung, aber ich habe das kompliziertere Skript benutzt, da ich noch eine Konstante (0.175) für die Übergangswiderstände addieren musste (alpha). So fand ich es übersichtlicher, ausserdem ging es mit dem anderen nicht.
Hier das Skript:
Code:
function summe_R()
		{
		var R1= parseFloat (window.document.forms[2].elements['R1'].value); 
              var R2=parseFloat (window.document.forms[2].elements['R2'].value); 
              var R3= parseFloat (window.document.forms[2].elements['R3'].value); 
              var R4=parseFloat  (window.document.forms[2].elements['R4'].value); 
              var R5= parseFloat (window.document.forms[2].elements['R5'].value);
              var alpha=parseFloat(0.175);
		
		if ( isNaN(R1) == true ) {
                                   R1 = 0;
                               } else {
                                   R1 = parseFloat(R1);
                               }

                               if ( isNaN(R2) == true ) {
                                   R2 = 0;
                               } else {
                                   R2 = parseFloat(R2);
                               }

                               if ( isNaN(R3) == true ) {
                                   R3 = 0;
                               } else {
                                   R3 = parseFloat(R3);
                               }

                               if ( isNaN(R4) == true ) {
                                   R4 = 0;
                               } else {
                                   R4 = parseFloat(R4);
                               }

                               if ( isNaN(R5) == true ) {
                                   R5 = 0;
                               } else {
                                   R5 = parseFloat(R5);
                               }
		var ziel=R1+R2+R3+R4+R5+alpha;  
		
		if (ziel<1)
			{ziel='0'+ ziel;}
		
  
		window.document.forms[2].elements['R-Wert'].value=ziel;
		}

Da es bei diesen etwa fünf Feldern (Wandschichten) bleibt, ist das kein Problem. Für mehr arrays, wie etwa bei meiner Begriffs-Datenbank ist das Hochzählen absolut notwendig.
Nochmals vielen Dank für Deine Arbeit.

Ach ja, meinst Du, dass man irgendeine Form von graphischer Ausgabe bewerkstelligen kann, z.B. die Werte von R1 ... R5 als Schichtendiagramm oder so????

Gruss
Jacky:)
 
hi

Code:
<script language="JavaScript" type="text/javascript">
<!--
function summe_R() {

var R1 = window.document.forms[2].elements['R1'].value;
var R2 = window.document.forms[2].elements['R2'].value;
var R3 = window.document.forms[2].elements['R3'].value;
var R4 = window.document.forms[2].elements['R4'].value;
var R5 = window.document.forms[2].elements['R5'].value;

var alpha = 0.175;

test = new Array(R1,R2,R3,R4,R5);
ziel = 0;

for ( i = 0; i < test.length; ++i ) {

    if ( test[i] == "" || isNaN(test[i]) == true ) {
        test[i] = 0;
    } else {
        test[i] = parseFloat(test[i]);
    }

ziel += test[i];

}

ziel = ziel + alpha;

window.document.forms[2].elements['R-Wert'].value = ziel;

}
//-->
</script>

Das mit dem Schichtendiagramm wüßte ich nicht wie Balkendiagramm wäre recht einfach zu machen.
 
Diagramm

Hallo René

danke für den Code, ich hatte ziel = ziel + alpha; in die for-Schleife gesetzt, kann ja nicht gehen.
Wegen des Diagramms versuche ich gerade für die Schichten 5 leere Bilder (leer.gif) mit je 100 Pixel Breite zu definieren, die ich dann je nach R1..R5 mit einem Schicht-Bild (schicht.gif) auswechsle und danach noch die Grösse (nur Breite) neu definiere (über .width). Die neue Breite soll über den Faktor ermittelt werden, den das jeweilige R hergibt (etwa: R1 ist 0.273, schicht.gif vorher Breite 100 Pixel, nachher 0.273 * 100 wäre noch 27.3 Pixel gross). Bis jetzt klappts aber noch nicht, anscheinend kann man kein width zuweisen??
Code:
bild1=new Image ();
	bild1.src="schicht.gif";
	bild2=new Image ();
	bild2.src="schicht2.gif";
		
	leer=new Image();
	leer.src="leer.gif";
		
		function grafik_anzeigen()
		{
		var R1= parseFloat (window.document.forms[2].elements['R1'].value); 
              var R2=parseFloat (window.document.forms[2].elements['R2'].value); 
              var R3= parseFloat (window.document.forms[2].elements['R3'].value); 
              var R4=parseFloat  (window.document.forms[2].elements['R4'].value); 
              var R5= parseFloat (window.document.forms[2].elements['R5'].value);
              
              var faktor1=R1*100;
              var faktor2=R2*100;
              var faktor3=R3*100;
              var faktor4=R4*100;
              var faktor5=R5*100;
		
		window.document.images[0].src=bild1.src;
		window.document.images[0].width= faktor1;
		window.document.images[1].src=bild2.src;
		window.document.images[1].width= faktor2;
		window.document.images[2].src=bild1.src;
		window.document.images[2].width= faktor3;
		window.document.images[3].src=bild2.src;
		window.document.images[3].width= faktor4;
		window.document.images[4].src=bild1.src;
		window.document.images[4].width= faktor5;
		
		}

Gruss
Jacky
 
hi jacky,

Code:
<html>
<head>

<script language="JavaScript" type="text/javascript">
<!--
function summe_R() {

/************************************************************/

var R1 = window.document.forms[2].elements['R1'].value;
var R2 = window.document.forms[2].elements['R2'].value;
var R3 = window.document.forms[2].elements['R3'].value;
var R4 = window.document.forms[2].elements['R4'].value;
var R5 = window.document.forms[2].elements['R5'].value;

var alpha = 0.175;

test = new Array(R1,R2,R3,R4,R5);
var ziel = 0;

for ( i = 0; i < test.length; ++i ) {

    if ( test[i] == "" || isNaN(test[i]) == true ) {
        test[i] = 0;
    } else {
        test[i] = parseFloat(test[i]);
    }

    ziel += test[i];

}

ziel = ziel + alpha;

window.document.forms[2].elements['R-Wert'].value = ziel;

/************************************************************/

IE  = ( document.all );
NS6 = ( document.getElementById && !document.all );
NS  = ( navigator.appName == "Netscape" && navigator.appVersion.charAt(0) == "4" );

w1 = test[0] * 100;
w2 = test[1] * 100;
w3 = test[2] * 100;
w4 = test[3] * 100;
w5 = test[4] * 100;

var diagramm = '<img src="schicht1.gif" border="0" width="' + w1 + '" height="10">'
             + '<img src="schicht2.gif" border="0" width="' + w2 + '" height="10">'
             + '<img src="schicht3.gif" border="0" width="' + w3 + '" height="10">'
             + '<img src="schicht4.gif" border="0" width="' + w4 + '" height="10">'
             + '<img src="schicht5.gif" border="0" width="' + w5 + '" height="10">';

if ( IE ) {
    document.all.ie.innerHTML = diagramm;
} else if ( NS6 ) {
    document.getElementById("ie").innerHTML = diagramm;
} else if ( NS ) {
    document.ns.document.open();
    document.ns.document.write('<span>' + diagramm + '</span>');
    document.ns.document.close();
}

/************************************************************/

}
//-->
</script>

</head>
<body>

<form>
</form>

<form>
</form>

<form>

<input name="R1" type="text" value="0.11"><br>
<input name="R2" type="text" value="0.22"><br>
<input name="R3" type="text" value="0.33"><br>
<input name="R4" type="text" value="0.44"><br>
<input name="R5" type="text" value="0.55"><br><br>


<input name="R-Wert" type="text" value=""><br><br>

<input type="button" value="Rechne" onClick="summe_R();">

</form>

<div id="ie"></div>
<layer id="ns"></layer>

</body>
</html>
 
Zuletzt bearbeitet:
Netscape-Problem

Hallo René,

habe es erst mit layern probiert, was z.T. auch ging, aber recht kompliziert ist. (Geht aber auch im Netscape 4.7x)
Leider funzt Dein Skript im Netscape nicht, es erscheint nur ein unveränderter schwarzer Mini-Balken, im IE kommt wunderbar eine Grafik nach der anderen in der korrekten Grösse.
Warum???
Wenn ich jetzt alles noch auf die verschiedenen Browser ummünzen muss, schluck, würg.

Mit den Browsern ist das so eine Krankheit; ich musste noch für Netscape eine zusätzliche 0 vor die Dezimalzahl setzen, weil sonst statt 0.25 eben .25 angezeigt wird. Hätte ich das generell gemacht, so käme dann im IE statt 0.25 eben 00.25. Echt klasse.

Gruss
Jacky:mad:
 
Zurück
Oben