You are not logged in.

wcf.regNote.message

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

1

Wednesday, September 10th 2008, 1:29pm

Formularfelder berechnen sofort nach Werteingabe

Ich habe ein Formular mit 10 Eingabefeldern. Standardwert für alle Felder ist 0. Wenn nun ein Feld verändert wird soll ein Feld "Total" automatisch die Summe aus den 10 Feldern erhalten. Ich habe versucht mit "onchange" bei jedem Eingabefeld die Änderung zu erfassen und dann das Totalfeld neu zu berechnen aber irgendwie klappt das nicht. Kann mir da jemand kurz bei helfen?
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Artanis

Beginner

Posts: 22

Location: VR

Occupation: Systementwickler

  • Send private message

2

Wednesday, September 10th 2008, 2:22pm

Versuch es mal mit
onKeyUp='deineFunktion()' nach Tastatureingabe oder
onBlur='...' beim Verlassen des Feldes.

onChange geht unter anderem bei <SELECT>
:cbcool:

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

3

Wednesday, September 10th 2008, 2:29pm

Ich glaube ich habe irgendwie einen grundsätzlichen Denkfehler. So sieht der Teil aus der eigentlich die Neuberechnung machen sollte.

PHP Source code

1
onBlur="document.getElementsByName('total').value=umsatzwg1+umsatzwg2+umsatzwg3+umsatzwg4+umsatzwg5+umsatzwg6+umsatzwg7+umsatzwg8+umsatzwg9+umsatzwg10"
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Artanis

Beginner

Posts: 22

Location: VR

Occupation: Systementwickler

  • Send private message

4

Wednesday, September 10th 2008, 2:39pm

Wenn du getElementsByName('total') benutzt, kriegst du ein Array zurück mit allen Elementen, die 'total' heißen.

Da du aber vermutlich nur ein Element mit diesem Namen hast, nimmst du am besten das hier --> getElementsByName('total')[0].value...etc
:cbcool:

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

5

Wednesday, September 10th 2008, 2:43pm

OK also es tut sich schon mal was. Allerdings noch nicht das, was passieren soll.

Mein Feld "total" enthält nach Eingabe eines Wertes folgenden Inhalt

Quoted

[object HTMLInputElement][object HTMLInputElement][object HTMLInputElement][object HTMLInputElement][object HTMLInputElement][object HTMLInputElement][object HTMLInputElement][object HTMLInputElement][object HTMLInputElement][object HTMLInputElement]

Also exakt 10 Einträge. Scheinbar wird der Feldinhalt nicht als Wert behandelt. Muss ich ggf. auch über ...value arbeiten um den Wert des angesprochenen Feldes zu bekommen?
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Artanis

Beginner

Posts: 22

Location: VR

Occupation: Systementwickler

  • Send private message

6

Wednesday, September 10th 2008, 3:06pm

Also sind die Variablen umsatzwg1 etc. falsch gefüllt
Das sollen doch die Werte aus den Textfeldern sein, oder? Überprüf am besten nochmal das auslesen der Felder oder poste einen Teil davon.

So würd ichs machen:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
<input type='text' name='feld1' onBlur='rechne()'>
<input type='text' name='feld2' onBlur='rechne()'>
<!--restlichen Felder-->
<input type='text' name='total'>

<script>
function rechne(){
var umsatzwg1 =parseInt(document.getElementsByName('feld1')[0].value,10);
var umsatzwg2 = parseInt(document.getElementsByName('feld2')[0].value,10);
// entsprechend die restlichen Felder
document.getElementsByName('total')[0].value=umsatzwg1+umsatzwg2;
}
</script>




btw: Mir ist ein Fehler im Forum aufgefallen, vlt kannst du ihn ja beheben^^
Wollte erst den erweiterten Editor benutzen. Da ich aber keine Applets aktiviert habe, bin ich zurückgesprungen. Wenn man dann die Antwort abschicken will, kommt man wieder zum erweiterten Editor und kann garnicht mehr antworten :P
:cbcool:

This post has been edited 1 times, last edit by "Artanis" (Sep 10th 2008, 3:08pm)


Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

7

Wednesday, September 10th 2008, 3:23pm

Nun, da ich keine JS Funktion dafür basteln wollte hab ich das ganze jetzt einfach verpackt. So schaut jetzt eine Input Zeile aus und das klappt auch.

Quoted

<input type="text" name="umsatzwg1" size="15" value="0" class="input" onBlur="document.getElementsByName('total')[0].value=document.getElementsByName('umsatzwg1')[0].value*1+document.getElementsByName('umsatzwg2')[0].value*1+document.getElementsByName('umsatzwg3')[0].value*1+document.getElementsByName('umsatzwg4')[0].value*1+document.getElementsByName('umsatzwg5')[0].value*1+document.getElementsByName('umsatzwg6')[0].value*1+document.getElementsByName('umsatzwg7')[0].value*1+document.getElementsByName('umsatzwg8')[0].value*1+document.getElementsByName('umsatzwg9')[0].value*1+document.getElementsByName('umsatzwg10')[0].value*1">

Das "*1" bewirkt das der Feldinhalt automatisch in eine Zahl gewandelt wird und nicht als String behandelt wird. Problem ist jetzt lediglich noch das das Komma nicht als Trennzeichen behandelt wird sondern nur der Punkt.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

comand

Beginner

Posts: 12

  • Send private message

8

Wednesday, September 10th 2008, 11:40pm

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function getTotal(){
var zahl1 = parseint(document.getElementById('umsatzwg1').value);
var zahl2 = parseint(document.getElementById('umsatzwg2').value);
var zahl3 = parseint(document.getElementById('umsatzwg3').value);
var zahl4 = parseint(document.getElementById('umsatzwg4').value);
var zahl5 = parseint(document.getElementById('umsatzwg5').value);
var zahl6 = parseint(document.getElementById('umsatzwg6').value);
var zahl7 = parseint(document.getElementById('umsatzwg7').value);
var zahl8 = parseint(document.getElementById('umsatzwg8').value);
var zahl9 = parseint(document.getElementById('umsatzwg9').value);
var zahl10 = parseint(document.getElementById('umsatzwg10').value);

var total = zahl1 + zahl2 + zahl3 + zahl4 + zahl5 + zahl6 + zahl7 + zahl8 + zahl9 +zahl10;

document.getElementById('total').value = total;

}

<input type="text" id="umsatzwg1" name="umsatzwg1" size="15" value="0" class="input" onBlur="getTotal();" />


versuchs mal so.
musst nur den Inputs noch zusätzlich immer eine ID geben.

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

9

Thursday, September 11th 2008, 7:46am

Das parseint setzt die Variable in eine Zahl um das ist schon gut. Allerdings nur ganze Zahlen. Ich hab es wie gesagt durch "mal 1" gelöst was den Feldinhalt ebenfalls in eine Zahl wandelt. Dummerweise ist der Punkt das Dezimaltrennzeichen und nicht das Komma wie es eigentlich sein soll. Jetzt muss ich wohl doch eine kleine Funktion bauen und das eingegebene Komma als Punkt behandeln lassen und bei der Ausgabe das Ergebnis in einen String wandeln der ebenfalls mit Komma arbeitet.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Artanis

Beginner

Posts: 22

Location: VR

Occupation: Systementwickler

  • Send private message

10

Thursday, September 11th 2008, 8:47am

Das, was comand geschrieben hat, ist ja fast das selbe, was ich geschrieben hab :P

Aber zum Thema Int:

parseInt ist für Int
und parseFloat.. hmmm vermutlich für Float, also Kommazahlen

Am besten benutzt du vorher die Standard-replace Funktion, um alle Kommata zu Punkten zu machen. Danach parseFloat und alle sind glücklich.

Edit:
Es macht übrigens keinen Unterschied, ob du einem Feld eine Id gibst und die ansprichst oder halt per Namen.
Der einzige Unterschied liegt darin, dass du dir das [0] sparen kannst.
Naja und das Auslesen des Servers, da IDs nicht mit dem Request verschickt werden.
:cbcool:

This post has been edited 1 times, last edit by "Artanis" (Sep 11th 2008, 9:03am)


wcf.user.socialbookmarks.titel