online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon noopi vom 08.05.2019, 20:07 Options

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 deklarieren

Beispiel:
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 &#8222;;&#8220; 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.

Ähnliche Themen

Problem: javascript:void(0);
oli23847  21.02.2007 - 313 Hits -

Javascript
tomkat  08.07.2007 - 200 Hits - 2 Antworten

javascript:void(0);
Flashback2581  12.08.2007 - 774 Hits - 3 Antworten

javascript
börny  15.11.2007 - 123 Hits - 5 Antworten

wie macht man mit Javascript aus vorher festgelegten wörtern links?
nympseudo  06.07.2008 - 123 Hits - 10 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026