Javascript Problem
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 schreiben
Antwort 1 von Proggi vom 08.05.2019, 20:32 Options
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)
Antwort 2 von noopi vom 08.05.2019, 21:09 Options
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
Antwort 3 von rfb vom 08.05.2019, 21:51 Options
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.
Antwort 4 von Friedel vom 08.05.2019, 22:47 Options
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
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.
In Zeile 6 wird wieder die Variable m verwendet, obwohl es die noch nicht gibt.
Antwort 5 von rfb vom 09.05.2019, 08:56 Options
nochmal als Tipp am Rande:
Wenn du mit Zahlen rechnen willst, solltest du sie nicht als String deklarierenBeispiel:
var m1 = "2.54";
var m2 = "25.4";
var summe=m1+m2;
alert(summe);
ergibt die Ausgabe den String
2.5425.4
var m1 = 2.54;
var m2 = 25.4;
var summe=m1+m2;
alert(summe);
ergibt hingegen die Ausgabe
27.94
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.
Antwort 6 von noopi vom 10.05.2019, 21:50 Options
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
Antwort 7 von noopi vom 10.05.2019, 22:01 Options
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!
Antwort 8 von rfb vom 10.05.2019, 22:20 Options
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.