[GastForen Programme Web/Internet PDF Grundlagen / Web / eForms Berechnung hintereinander

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Web/Internet - Webdesign, eForms
Themen
Beiträge
Moderatoren
Letzter Beitrag

Berechnung hintereinander

Ramius
Beiträge gesamt: 208

7. Jan 2008, 10:57
Beitrag # 1 von 5
Bewertung:
(1914 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo

Die Feldberechnung zählt nur zusammen, wenn alle Felder mit Zahlen belegt sind. Wenn ein Feld dazwischen nicht ausgefüllt ist, stellt er die Zahlen hintereinander. Kann mir jemand sagen warum das so ist?:

Code
// Die Ziffern der Feldnamenerweiterung 
//var ziff = 0;

// Feldnamen mit den Ziffererweiterung
var n1 = "Benzin."+ziff;
var n2 = "Unterkunft." + ziff;
var n3 = "VerpflegungAufwand." + ziff;
var n4 = "VerpflegungPauschal." +ziff;
var n5 = "TaxiPark." +ziff;
var n6 = "AutoKm." +ziff;
var n7 = "Flug." +ziff;
var n8 = "BusBahn." +ziff;
var n9 = "DivPersonalkosten." +ziff;
var n10 = "Porti." +ziff;
var n11 = "DivAuslagen." +ziff;
var n12 = "Diverses." +ziff;

// Werte der Barauslagen
var t1 = this.getField(n1).value;
var t2 = this.getField(n2).value;
var t3 = this.getField(n3).value;
var t4 = this.getField(n4).value;
var t5 = this.getField(n5).value;
var t6 = this.getField(n6).value;
var t7 = this.getField(n7).value;
var t8 = this.getField(n8).value;
var t9 = this.getField(n9).value;
var t10 = this.getField(n10).value;
var t11 = this.getField(n11).value;
var t12 = this.getField(n12).value;


// Summe der Barauslagen
event.value = t1+t2+t3+t4+t5+t6+t7+t8+t9+t10+t11+t12;


Gruss, Ramius
MacOS 10.4.11, Acrobat 8.1.1
X

Berechnung hintereinander

taunus11
Beiträge gesamt: 609

7. Jan 2008, 14:24
Beitrag # 2 von 5
Beitrag ID: #329562
Bewertung:
(1898 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Als Wert eines nicht ausgefülltes Feld erhält man eine leere Zeichenkette. Diese Zeichenkette wird mit den Werten (Zeichenketten) der anderen Felder verknüpft.


als Antwort auf: [#329501]

Berechnung hintereinander

Ramius
Beiträge gesamt: 208

7. Jan 2008, 16:24
Beitrag # 3 von 5
Beitrag ID: #329619
Bewertung:
(1886 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Oh, vielen Dank. Da der Wert keine Zahl mehr ist, kann er nicht mehr zusammenrechnen.

Wie muss ich denn die Felder abholen, muss da jetzt eine if-Abfrage konstruieren oder reicht es wenn ich das Feld mit parseInt() hole? In etwa so:

Code
var t1 = parseInt(this.getField(n1).value); 


Gruss, Ramius

Hab's gleich ausprobiert. Das geht auch nicht und dazu kommt die Meldung NaN.


als Antwort auf: [#329562]
(Dieser Beitrag wurde von Ramius am 7. Jan 2008, 16:42 geändert)

Berechnung hintereinander

Markus Walker
Beiträge gesamt: 494

7. Jan 2008, 17:54
Beitrag # 4 von 5
Beitrag ID: #329658
Bewertung:
(1871 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Ramius,

parseInt() gibt eben immer dann NaN (Not a Number) wenns eben keine Nummer ist, also auch bei einem leeren String.

Je nach dem was du erreichen willst, kannst du die Eingabe bei den einzelnen Felder schon überprüfen (Validierung). Gerechnet wir nur wenn überall ein numerischer Wert eingegeben wurde. Gesteuert wird dies mit dem Property Doc.calculate .

Oder deine Lösung mit dem if-Konstrukt und parseInt() müsste erweitert werden. Da gibt es z.B. die Methode isNaN(), welche false zurück gibt, wenn der geprüfte Wert nicht NaN ist.
(Man Achte: (NaN == NaN) gibt false!)

Und sollte einfach mal zusammengezählt werden was schon eingegeben wurde, kann man die Feld-Wert jeweils mit 1 multiplizieren, um einen numerischen Wert zu kriegen:
var n1 = "Benzin." * 1 + ziff ;
Ein leerer String oder ein String bestehend aus lauter Leerzeichen mit 1 multipliziert ergibt 0.

Das sind die Tücken mit der dynamischen Typen-Konvertierung von JavaScript.


HTH


als Antwort auf: [#329619]
(Dieser Beitrag wurde von Markus Walker am 7. Jan 2008, 18:00 geändert)

Berechnung hintereinander

Ramius
Beiträge gesamt: 208

8. Jan 2008, 08:09
Beitrag # 5 von 5
Beitrag ID: #329743
Bewertung:
(1844 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Super. So einfach und simpel. Da muss man erst drauf kommen.

Allerdings musste ich das in einer anderen Zeile eingeben.
var t1 = this.getField(n1).value*1;

Die Zeile in der du es geschrieben hast, bestimmt nur den Feldnamen.

Vielen Dank euch.
Ramius


als Antwort auf: [#329658]
X