Formulare
Fehler!
- javascript
0 Rouven0 fisherman900 Harlequin0 Der Martin0 fisherman90
1 Der Martin
0 Klawischnigg0 Rouven
Hallo, ich habe ein großes Problem: Ich muss morgen bereits eine Webseite fertig haben, jedoch läuft mein JavaScript nicht richtig!Es soll über ein formular 2 verschiedene cds zu kaufen gebem. Es soll die Zahl aus einem bestimmten Feld im Formular auslesen, sie mit einem Preis multiplizieren und dann in das feld betrag reinschreiben. Dann soll auch noch der Gesamtpreis der aus beiden 2 Beträgen erstellt ist durch Addition errechnet und ins Feld preis ausgegeben werden. Doch beim IE läuft erstens nicht die Berechnung des Betrages aus dem 2.Feld, und bei IE und Firefox funktioniert die Preisausgabe nicht! Meine developer-toolbar git mir jedoch folgenden JS-Fehler:
missing ; before statement
Hier der Code:
function valuecalc2(){
$count=document.orderform.cd2anzahl2.value;
$price=14.90;
$val=eval($count*$price);
document.orderform.cd2betrag.value=$val;
$t=document.orderform.cd2betrag.value;
$u=document.orderform.cd1betrag.value;
$end=eval($t+$u);
document.orderform.preis.value=$end;
}
function valuecalc1(){
$count=document.orderform.cd1anzahl1.value;
$price=11.90;
$val=eval($count*$price);
document.orderform.cd1betrag.value=$val;
$v=document.orderform.cd2betrag.value;
$w=document.orderform.cd1betrag.value;
$end=eval($v+$w);
document.orderform.preis.value=$end;
}
Ich bitte um schnelle Hilfe!
MfG fisherman90
Hello,
was lässt dich glauben, dass $ eine gute Kennzeichnung für JavaScript-Variablen ist?
MfG
Rouven
Ja, das habe ich bereits geändert, sry, is ne php-angewohnheit!^^
Aber der Bug is immer noch der selbe:
function valuecalc2(){
var count=document.orderform.cd2anzahl2.value;
var price=14.90;
var val=eval(count*price);
document.orderform.cd2betrag.value=val;
var t=document.orderform.cd2betrag.value;
var u=document.orderform.cd1betrag.value;
var end2=eval(t+u);
document.orderform.preis.value=end2;
}
function valuecalc1(){
var count=document.orderform.cd1anzahl1.value;
var price=11.90;
var val= eval(count*price);
document.orderform.cd1betrag.value=val;
var v=document.orderform.cd2betrag.value;
var w=document.orderform.cd1betrag.value;
var end1= eval(v+w);
document.orderform.preis.value=end1;
}
Hello,
was lässt dich glauben, dass $ eine gute Kennzeichnung für JavaScript-Variablen ist?
MfG
Rouven
Yerf!
var val=eval(count*price);
Wozu eval()? JavaScript kann ganz normal rechnen:
var val=count*price;
An den anderen Stellen natürlich genauso.
Evtl. ist das auch der Fehler, da eval() versucht das Ergebnis der Rechnung (eine Zahl) auszuführen, bin mir nicht sicher ob das so sinnvoll ist...
Gruß,
Harlequin
Hallo,
var val=eval(count*price);
Wozu eval()?
Sag ich doch. Okay, du warst 'ne Minute schneller.
Evtl. ist das auch der Fehler, da eval() versucht das Ergebnis der Rechnung (eine Zahl) auszuführen, bin mir nicht sicher ob das so sinnvoll ist...
Naja, eval() versucht sein Argument zunächst in einen String umzuwandeln (falls es nicht bereits einer ist) und dann den Ausdruck auszuwerten, der mit diesem String formuliert wird. Wenn dieser Ausdruck nur ein Zahlenwert ist, schadet das nicht. Immerhin ist ja auch der semantisch sinnlose Code
for (var i=0; i<100; i++)
{ i;
}
syntaktisch korrekt: In einer Schleife wird 100mal der Ausdruck i ausgewertet. Sinnlos, aber formal in Ordnung.
Und so sehe ich auch den Einsatz von eval() hier: Sinnlos, aber unschädlich.
So long,
Martin
Hallo zusammen!
Erstmal danke für die vielen Antworten!
Ich hab eval rausgelöscht, die Error-message hat sich erledigt^^
Aber schon kam das nächste Problem:
der Endpreis, also jeweils die letzte Zeile der Funktionen schreibt dort Zahlen hinein die rechnerisch nicht richtig sind!
zB: t=14.9
und u=11.9,
dann errechnet der als endpreis:14.911.9
und das kann ja irgendwie nicht stimmen :( kanns sein,dass der ein Problem mit den nachkommastellen hat?
aktueller Code:
function valuecalc2(){
var count=document.orderform.cd2anzahl2.value;
var price=14.90;
var val = count*price;
document.orderform.cd2betrag.value=val;
var t=document.orderform.cd2betrag.value;
var u=document.orderform.cd1betrag.value;
var end2 = t+u;
document.orderform.preis.value=end2;
}
function valuecalc1(){
var count=document.orderform.cd1anzahl1.value;
var price=11.90;
var val= count*price;
document.orderform.cd1betrag.value=val;
var v=document.orderform.cd2betrag.value;
var w=document.orderform.cd1betrag.value;
var end1= v+w;
document.orderform.preis.value=end1;
}
Danke schonmal im Voraus!
Hello,
und das kann ja irgendwie nicht stimmen :( kanns sein,dass der ein Problem mit den nachkommastellen hat?
Forumshilfe: Fließkommarechnung
MfG
Rouven
Danke alle zusammen, dass ihr einem JS-Newbie helft ^^
Es läuft jetzt, hab nur noch einen IE-Bug!:
Wenn ich das ganze in Firefox ausführe, läufts, aber in IE muss ich bevor in valuecalc1 in document.orderform.cd1betrag was reingeschrieben wird, es erst einmal angeklickt haben. Wenn ich nicht vorher anklicke, wird einfach nichts reingeschrieben! Das ist recht komisch, da es ja beim andern ohne anklicken läuft, und die funktionen eig. recht identisch sind! Scheint für mich eine Art Interpretationsfehler zu sein, oder was sagt ihr?
Mahlzeit,
zB: t=14.9
und u=11.9,
dann errechnet der als endpreis:14.911.9
und das kann ja irgendwie nicht stimmen :( kanns sein,dass der ein Problem mit den nachkommastellen hat?
Nö. Für JS sind die Werte, die du aus <input>-Felder mit dem type="text" holst, eben Strings ... und verkettet ergeben '14.9' und '11.9' halt '14.911.9'.
Versuch's mal damit:
var end2 = t+u;
var end2 = parseFloat(t) + parseFloat(u);
Achja ... und überleg dir ggf. mal, ob es nicht sinnvoll wäre, statt zwei Funktionen, die im Prinzip bis auf gewisse Werte absolut genau dasselbe machen, nicht zu einer zusammenzufassen. Ist so ne Art Grundprinzip des Programmierens ...
MfG,
EKKi
Yerf!
dann errechnet der als endpreis:14.911.9
und das kann ja irgendwie nicht stimmen :( kanns sein,dass der ein Problem mit den nachkommastellen hat?
Nein, aber + ist nicht nur der Operator für die Addition, sondern auch für die Stringverkettung. Der value eines Formularfeldes ist ein String, deshalb hängt er die 2 Werte aneinander anstatt zu addieren.
Du brauchst hier noch ein parseInt()
Gruß,
Harlequin
Yerf!
Du brauchst hier noch ein parseInt()
Ups... natürlich parseFloat(), ist auch auf der Seite zu finden.
Gruß,
Harlequin
Hi,
Aber der Bug is immer noch der selbe:
in welcher Zeile? Und bist du sicher, dass du den vollständigen Javascript-Code hier wiedergegeben hast? Die Fehlermeldung lässt mich vermuten, dass da noch irgendwas fehlt. Und dieses "irgendwas" scheint entscheidend zu sein. Was du hier zeigst, ist zumindest syntaktisch korrekt.
var val=eval(count*price);
Wozu eigentlich das eval()? Bestimmt nicht, um zwei Ausdrücke zu multiplizieren. Weg damit!
var end2=eval(t+u);
Dito.
Hello,
[...]
Rouven
Und bitte kein TOFU, danke sehr.
So long,
Martin
Hi there,
was lässt dich glauben, dass $ eine gute Kennzeichnung für JavaScript-Variablen ist?
Was läßt Dich vermuten, daß es eine schlechte ist? Sogar in dem bei O'Reilly erschienen Javascript Referenzwerk von David Flanagan werden zT. Javascriptvariablen mit vorangestelltem $-Zeichen verwendet.
Was vor allem hat das mit der Frage des OP zu tun?
Hello,
Was läßt Dich vermuten, daß es eine schlechte ist? Sogar in dem bei O'Reilly erschienen Javascript Referenzwerk von David Flanagan werden zT. Javascriptvariablen mit vorangestelltem $-Zeichen verwendet.
...die Aussage in JavaScript Regeln für selbstvergebene Namen, dass als einziges Sonderzeichen ein _ erlaubt ist.
Was vor allem hat das mit der Frage des OP zu tun?
ich war davon ausgegangen, dass die Meldung bzgl. des fehlenden Semikolons sich darauf bezieht, dass der Interpreter das $ als irgend eine Form von reserviertem Zeichen interpretierte, vor dem er einen Abschluss des vorangestellten Befehls erwartet.
MfG
Rouven
Hi there,
...die Aussage in JavaScript Regeln für selbstvergebene Namen, dass als einziges Sonderzeichen ein _ erlaubt ist.
Was imho hier definitiv falsch ist und auch meiner Erfahrung nach stimmt. Das $-Zeichen in Bezeichnern wurde ab Navigator 3.0 (IE ab Version 4.0) zulässig, um angeblich Kompatibilität zu Java zu erreichen. Theoretisch ist das $-Zeichen sogar mitten und natürlcih auch am Ende des Bezeichners möglich, man kann also seine Variablen aussehen lassen wie BASIC-Strings (würg;)
Sogar Variablen namens $_$_$_$, $$$_$$$ oder auch _$__$___$____$____$___$__$_ wären möglich und zulässig (kann ich übrigens schon alleine aus Gründen der besseren Lesbarkeit wärmstens empfehlen ;))
Was imho hier definitiv falsch ist und auch meiner Erfahrung nach stimmt.
Muss natürlich heissen 'nicht stimmt' ;)