Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Javascript Problem
Frage
Hallo liebe Supportler
Ich habe folgende Frage:
function pxm() {
var dpi = document.form.dpi.value
var Bm = document.form.Bm.value
var Hm = document.form.Hm.value
var Bpxm = screen.width / dpi * m / screen.width
var Hpxm = screen.height / dpi * m / screen.width
if (document.form.m.checked == true) {
var m = "2.54"
var E = "cm"
} else {
var m = "25.4"
var E = "mm"
}
if (isNaN(dpi) || isNaN(Bm) || isNaN(Hm)) {
alert("Bitte Zahlen (!) eingeben...")
} else {
var pxB = "1" / Bpxm * Bm
var pxH = "1" / Hpxm * Hm
alert("Test: " + Bpxm)
}
}
Für alert("Test: ) + Bpxm) wird nur "Test: NaN" ausgegeben... weshalb?!
Ich komm nicht weiter... bin kein Profi aber das sollte doch machbar sein =(
Danke für eure Hilfe
mlg
noopi
Antwort 1 von Proggi
entweder ist document.form.Bm.value kein Zahlenwert und dadurch kriegst du n fehler wenn du Zahlenwerte mit Stringwerten multiplizieren möchtest kriegst du die NaN als Wert der Variable.
also "1 " * 1 = NaN
(1 Leertaste *1)
also "1 " * 1 = NaN
(1 Leertaste *1)
Antwort 2 von noopi
Hallo
Danke für den Tipp! Aber:
Bm muss ein Zahlenwert sein, weil die abfrage
if (isNaN(Bm))
überprüft, ob es ein Zahlenwert ist, wenn nicht, wird
alert("Bitte Zahlen (!) eingeben...") ausgegeben!
Die zweite These mit den Strings schein plausibel...
Hab's aber mit einfacheren Beispielen getestet und es hat funktioniert!
Hat noch jemand ein Tipp?!
mlg
Danke für den Tipp! Aber:
Bm muss ein Zahlenwert sein, weil die abfrage
if (isNaN(Bm))
überprüft, ob es ein Zahlenwert ist, wenn nicht, wird
alert("Bitte Zahlen (!) eingeben...") ausgegeben!
Die zweite These mit den Strings schein plausibel...
Hab's aber mit einfacheren Beispielen getestet und es hat funktioniert!
Hat noch jemand ein Tipp?!
mlg
Antwort 3 von rfb
Wesentliche Frage: was sagt denn die Fehlerkonsole des Firefox?
Ansonsten kann ich nur raten:
Bei der ersten Verwendung von m ist es noch gar nicht initialisiert.
Ansonsten kann ich nur raten:
Bei der ersten Verwendung von m ist es noch gar nicht initialisiert.
Antwort 4 von Friedel
Du hast zwar eine Funktion gepostet, aber nicht die Seite, in die die Funktion eingebaut ist. Wenn diese Funktion nicht aufgerufen wird, wird sie auch nicht ausgeführt. Und offensichtlich wird sie nicht aufgerufen, denn du schreibst nichts von Fehlermeldungen.
Zum ersten fehlen in diesem Script haufenweise Semikolons.
In Zeile 5 schreibst du
In Zeile 6 wird wieder die Variable m verwendet, obwohl es die noch nicht gibt.
Zum ersten fehlen in diesem Script haufenweise Semikolons.
In Zeile 5 schreibst du
Zitat:
var Bpxm = screen.width / dpi * m / screen.width
Die Variable m wird aber erst in Zeile 8 oder 11 definiert. Spätestens dadurch würde die erste Fehlermeldung kommen und die Ausführung des Scripts würde abgebrochen werden.var Bpxm = screen.width / dpi * m / screen.width
In Zeile 6 wird wieder die Variable m verwendet, obwohl es die noch nicht gibt.
Antwort 5 von rfb
nochmal als Tipp am Rande:
Wenn du mit Zahlen rechnen willst, solltest du sie nicht als String deklarieren
Beispiel:
ergibt die Ausgabe den String
ergibt hingegen die Ausgabe
Einige solcher Fehler kann die automatische Typumwandlung in JavaScript zwar abfangen, aber nicht immer klappt das und das gewünschte Ergebnis muss dabei auch nicht erscheinen.
Wenn du mit Zahlen rechnen willst, solltest du sie nicht als String deklarieren
Beispiel:
var m1 = "2.54";
var m2 = "25.4";
var summe=m1+m2;
alert(summe);ergibt die Ausgabe den String
2.5425.4var m1 = 2.54;
var m2 = 25.4;
var summe=m1+m2;
alert(summe);ergibt hingegen die Ausgabe
27.94Einige solcher Fehler kann die automatische Typumwandlung in JavaScript zwar abfangen, aber nicht immer klappt das und das gewünschte Ergebnis muss dabei auch nicht erscheinen.
Antwort 6 von noopi
naja jetzt funktioniert es jedenfalls... Danke für eure Hilfe!
<html><head>
<!-- Pete -->
<meta http-equiv="Content-Language" content="de-ch">
<title>Kleiner Umrechner...</title>
<script type="text/javascript">
function pxm() {
var dpi = document.form.dpi.value
var Bm = document.form.Bm.value
var Hm = document.form.Hm.value
if (document.form.m.checked == true) {
var m = 2.54
var E = "cm"
} else {
var m = 25.4
var E = "mm"
}
if (isNaN(dpi) || isNaN(Bm) || isNaN(Hm)) {
alert("Bitte Zahlen (!) eingeben...")
} else {
var Bpxm = screen.width / dpi * m / screen.width
var Hpxm = screen.height / dpi * m / screen.width
var pxB = 1 / Bpxm * Bm
var pxH = 1 / Hpxm * Hm
with (document) {
open();
write("<font face=\"Arial Narrow\">In der horizontalen solltest du <b>" + pxB + "</b> Pixel verwenden... (" + Bm + " " + E + ")<br>");
write("In der vertikalen solltest du <b>" + pxH + "</b> Pixel verwenden...(" + Hm + " " + E + ")<br></font>");
close();
}
}
}
</script>
</head><body>
<form name="form" action="">
<p><font face="Arial Narrow">Wie viele <i>DPI</i> hat dein Bildschirm?!</font></p>
<p><font face="Arial Narrow"><input type="text" name="dpi" size="20"></font></p>
<p><font face="Arial Narrow">Wie viele <i>cm/mm</i> in der Horizontalen möchtest du darstellen?!</font></p>
<p><font face="Arial Narrow"><input type="text" name="Bm" size="20"></font></p>
<p><font face="Arial Narrow">Wie viele <i>cm/mm</i> in der Vertikalen möchtest du darstellen?!</font></p>
<p><font face="Arial Narrow"><input type="text" name="Hm" size="20"></font></p>
<p><font face="Arial Narrow"><input type="checkbox" name="m" value="ON"> In <i>cm</i> rechnen! (Wenn leer, wird
in <i>mm</i> gerechnet!)</font></p>
<p><input type="submit" value=" ... Weiter ... " name="B1" onclick="pxm()"></p>
</form>
</body></html>
Nun fehlt nur noch etwas php das man es auch nutzen kann =/
mlg
<html><head>
<!-- Pete -->
<meta http-equiv="Content-Language" content="de-ch">
<title>Kleiner Umrechner...</title>
<script type="text/javascript">
function pxm() {
var dpi = document.form.dpi.value
var Bm = document.form.Bm.value
var Hm = document.form.Hm.value
if (document.form.m.checked == true) {
var m = 2.54
var E = "cm"
} else {
var m = 25.4
var E = "mm"
}
if (isNaN(dpi) || isNaN(Bm) || isNaN(Hm)) {
alert("Bitte Zahlen (!) eingeben...")
} else {
var Bpxm = screen.width / dpi * m / screen.width
var Hpxm = screen.height / dpi * m / screen.width
var pxB = 1 / Bpxm * Bm
var pxH = 1 / Hpxm * Hm
with (document) {
open();
write("<font face=\"Arial Narrow\">In der horizontalen solltest du <b>" + pxB + "</b> Pixel verwenden... (" + Bm + " " + E + ")<br>");
write("In der vertikalen solltest du <b>" + pxH + "</b> Pixel verwenden...(" + Hm + " " + E + ")<br></font>");
close();
}
}
}
</script>
</head><body>
<form name="form" action="">
<p><font face="Arial Narrow">Wie viele <i>DPI</i> hat dein Bildschirm?!</font></p>
<p><font face="Arial Narrow"><input type="text" name="dpi" size="20"></font></p>
<p><font face="Arial Narrow">Wie viele <i>cm/mm</i> in der Horizontalen möchtest du darstellen?!</font></p>
<p><font face="Arial Narrow"><input type="text" name="Bm" size="20"></font></p>
<p><font face="Arial Narrow">Wie viele <i>cm/mm</i> in der Vertikalen möchtest du darstellen?!</font></p>
<p><font face="Arial Narrow"><input type="text" name="Hm" size="20"></font></p>
<p><font face="Arial Narrow"><input type="checkbox" name="m" value="ON"> In <i>cm</i> rechnen! (Wenn leer, wird
in <i>mm</i> gerechnet!)</font></p>
<p><input type="submit" value=" ... Weiter ... " name="B1" onclick="pxm()"></p>
</form>
</body></html>
Nun fehlt nur noch etwas php das man es auch nutzen kann =/
mlg
Antwort 7 von noopi
Ahh und besoneren danke an Friedel ! Es hat nicht funktioniert, weil m zu spät definiert wurde…
Die „;“ sind jedoch nicht immer notwendig! Javascript ist dabei nicht so pingelig… wie bsp.w. PHP!
Die „;“ sind jedoch nicht immer notwendig! Javascript ist dabei nicht so pingelig… wie bsp.w. PHP!
Antwort 8 von rfb
Zitat:
Die „;“ sind jedoch nicht immer notwendig!
doch - und zwar um den Überblick zu behalten. Gerade weil JavaScript "nicht pingelig" ist bedarf die Programmierung in dieser Sprache besonderer Sorgfalt.Die „;“ sind jedoch nicht immer notwendig!

