Fehlerhafter Code
Patrick
- javascript
1 Rolf B1 Rolf B1 Robert B.- html
- javascript
0 Nadir
Hallo Community,
im nachfolgenden Code ist irgendwo ein Fehler, da sich das Fenster nicht öffnet.
Kann mir jemand helfen.
Vielen Dank.
Patrick
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
function schreibwas () {
var eingabe = parseInt(prompt)("Na,wie schnell waren Sie denn?","");
document.getElementById("ergebnis").innerHTML = eingabe;
var antwort1 = 100;
var antwort2 = 150;
var antwort3 = 200;
if (eingabe <= antwort1) {
document.getElementById("ergebnis").innerHTML = "Sie sind bei "+eingabe+" erwischt worden - kein Problem, Sie waren wohl zu Fuß unterwegs.";
} else if ((eingabe >= antwort1) && (eingabe < antwort2)) {
document.getElementById("ergebnis").innerHTML = "Sie sind bei "+eingabe+" erwischt worden - Das kostet 100 Euronen";
} else if ((eingabe >= antwort2) && (eingabe < antwort3)) {
document.getElementById("ergebnis").innerHTML = "Sie sind bei "+eingabe+" erwischt worden - Das wird teuer. Bestimmt 350 Euronen und 3 Monate Flugverbot.";
} else if (eingabe >= antwort3) {
document.getElementById("ergebnis").innerHTML = "Sie sind bei "+eingabe+" erwischt worden - Sie sind Ihren Führerschein los.";
} else {
document.getElementById("ergebnis").innerHTML = "Sie haben keine Zahl eingegeben.";
}
</script>
</head>
<link href="style6-1.css" rel="stylesheet" type="text/css">
<body>
<h1>Radarfalle auf der Milchstrasse</h1>
<p><a href="#" onClick="schreibwas()">Blitzchecker</a></p>
<div id="fragebox">
<div id="fragenr"></div>
<div id="ergebnis"></div>
</div>
</body>
</html>
Hallo Patrick,
ich habe Dich hier schon auf die Codeformatierung hingewiesen.
Wenn Du Antworten haben möchtest, unterstütze uns beim Verständnis deines Problems. Einmal mache ich es noch für Dich.
Öffne die Entwicklerwerkzeuge deines Browsers und lade die Seite neu. In der Konsole wird es dann rot.
Rolf
Hallo Patrick,
ich gebe zu, die Fehler sind aus den Meldungen des Browsers nicht so einfach zu erkennen.
Fehler 1:
Uncaught SyntaxError: Unexpected end of input (at patrick.html:23:1)
Zeile 23 ist das </script> Tag. Dass ihm da ein }
fehlt, um die schreibwas()-Funktion abzuschließen, geht aus der Fehlermeldung nur indirekt hervor.
Nach Korrektur kommt Fehler 2:
Uncaught TypeError: parseInt(...) is not a function
at schreibwas (patrick.html:7:31)
at HTMLAnchorElement.onclick (VM81 patrick.html:1:1)
Da denkt man dann: Hä? parseInt ist doch eine Funktion. Aber man muss genau hinschauen: er sagt nicht parseInt
ist keine Funktion, sondern : parseInt(...)
ist keine Funktion. Und das liegt daran, dass Du
parseInt(prompt)("Na,wie schnell waren Sie denn?","")
geschrieben hast. Was hier passiert, ist echt fies und bei Sprachen, die Funktionen als vollwertige Objekte behandeln, ein gelegentlich kniffliges Problem.
prompt
ist eine Funktion, die global bekannt ist. Du rufst die Funktion parseInt
auf und übergibst ihr diese Funktion (nicht ihr Ergebnis) als Parameter. Da parseInt aus einer Funktion keine Zahl herausdeuten kann, ist das Ergebnis NaN
(Not a Number). Er versucht jetzt, diesen Ausdruck auszuwerten:
NaN("Na,wie schnell waren Sie denn?","")
Das sieht bekloppt aus - aber das weiß JavaScript vorher nicht. Hätte parseInt ein Funktionsobjekt zurückgegeben, dann wäre das Programm weitergelaufen, und es gibt durchaus Code, der solche Konstrukte nutzt. Dann kann man dem Code zwar nicht mehr ansehen, was er tun wird, aber, tja, es gibt Genies, die sowas bauen.
Aber es kommt eben NaN
zurück, und das ist ein einfacher Wert und keine Funktion. Deshalb motzt er. Er hätte schreiben können "NaN is not a function". Tut er nicht, er sagt Dir, wie das NaN zu Stande gekommen ist: durch den Aufruf von parseInt(...).
Die richtige Schreibweise zu finden überlasse ich jetzt Dir.
Rolf
Moin Patrick,
im nachfolgenden Code ist irgendwo ein Fehler, da sich das Fenster nicht öffnet.
vorab: welches Fenster? Da wird nirgends eines geöffnet. Ein Prompt ist ein eben solcher und nicht zwingend ein neues Fenster. Dafür wird diese Methode aber anders als in Deinem Code ausgerufen, worauf Rolf ja schon hingewiesen hat.
Ansonsten:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
In HTML5 kannst Du den Charset auch kürzer und möchtest Du für die Zugänglichkeit den Viewport angeben:
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript">
In HTML5 ist text/javascript
Default und kann weggelassen werden.
function schreibwas () { var eingabe = parseInt(prompt)("Na,wie schnell waren Sie denn?",""); document.getElementById("ergebnis").innerHTML = eingabe;
Die Sache mit prompt haben wir ja schon.
Die Referenz von eingabe
wird später nicht mehr geändert, daher kann es statt var
auch const
sein. Es gibt allerdings keine Fehlerprüfung für parseInt
– und da das Ergebnis auf jeden Fall kein HTML ist, reicht die Zuweisung an innerText
vollkommen aus.
Apropos: Da das Element mit der ID „Ergebnis“ anscheinend Dein Ausgabefeld ist, kannst Du es einmal aus dem DOM ermitteln und dann in jedem einzelnen Anwendungsfall darauf zugreifen:
const ausgabe = document.getElementById("ergebnis");
// später im Code:
ausgabe.innerText = …;
Das sind natürlich auch konstante Referenzen:
var antwort1 = 100; var antwort2 = 150; var antwort3 = 200;
Das ist natürlich kein Link, sondern ein Button!
<p><a href="#" onClick="schreibwas()">Blitzchecker</a></p>
Andererseits kannst Du statt des Prompts auch direkt ein Formular verwenden und der Button triggert dann die Überprüfung. Damit brauchst Du auch den Eingabewert nicht noch einmal wiederzugeben, weil er immer noch auf der Seite steht.
<div id="fragebox"> <div id="fragenr"></div> <div id="ergebnis"></div> </div>
Ein div
hat keine inhaltliche Bedeutung, aber es sieht eher nach einer Bedeutung aus; vielleicht ist eine section
oder etwas Anderes passender. Das Ergebnis ist jedenfalls semantisch ein Absatz oder eine Ausgabe.
Viele Grüße
Robert