Browserfehler: "0: Unable to get property 'SavePersonalAndPaymentData' of undefined or null reference"?
Hallo,
ich habe eine Aufgabe gemacht und mein Browser gibt diesen Fehler aus:
0: Unable to get property 'SavePersonalAndPaymentData' of undefined or null reference
Ich glaube aber, dass die Aufgabe richtig ist!
Ich habe es auch einen Freund geschickt und bei ihm funktioniert es ebenfalls nicht.
HTML:
<!DOCTYPE html>
<html>
<head lang="de">
<meta charset="UTF-8" />
<style type="text/css"></style>
<title>Lieblings Professor</title>
</head>
<body>
<form>
<fieldset>
<legend>Notenberechnung<br>Teilaufgaben</legend>
<label for="aufgabe1">Aufgabe 1:</label>
<input type="number" name="Augabe1" id="a">
<br><br>
<label for="aufgabe2">Aufgabe 2:</label>
<input type="text" name="Aufgabe2" id="b">
<br><br>
<label for="aufgabe3">Aufgabe 3:</label>
<input type="number" name="Augabe3" id="c">
<br><br>
<label for="aufgabe4">Aufgabe 4:</label>
<input type= "number" name="Augabe4" id="d">
<br><br>
<button id="069" value="069">druck berechne</button>
</fieldset>
</form>
<h1>Note</h1>
<div id="note"></div>
<script src="x1.js"></script>
</body>
</html>
</form>
<h1>Note</h1>
<div id="note"></div>
<script src="x1.js"></script>
</body>
</html>
JavaScript:
"use strict"
window.addEventListener("load", init);
function init() {
console.log("Fenster ist geladen");
let btn = document.getElementById("069");
btn.addEventListener("click", btnfk);
function btnfk() {
console.log("ich wurde geklickt!!!!");
let aufgabe1 = document.getElementById("a").value;
console.log(aufgabe1);
let aufgabe2 = document.getElementById("b").value;
console.log(aufgabe2);
let aufgabe3 = document.getElementById("c").value;
console.log(aufgabe3);
let aufgabe4 = document.getElementById("d").value;
console.log(aufgabe4);
aufgabe1 = Number(aufgabe1);
aufgabe2 = Number(aufgabe2);
aufgabe3 = Number(aufgabe3);
aufgabe4 = Number(aufgabe4);
let note = document.getElementById("note");
global = global + aufgabe1 + aufgabe2 + aufgabe3 + aufgabe4;
note.textContent = global;
let note5 = document.createElement("div");
document.body.appendChild(note5);
if (global < 12) {
note5.textContent = "Ihre Note ist 5!!!!!";
}
if (global >= 12 && global <= 15) {
note5.textContent = "Ihre Note ist 4 ...";
}
if (global >= 15 && global <= 18) {
note5.textContent = "Ihre Note ist 3";
}
if (global >= 18 && global <= 21) {
note5.textContent = "Ihre Note ist 2 super";
}
if (global >= 21) {
note5.textContent = "Ihre Note ist 1 WOW";
}
}
}
let global = 0;
Wenn ich statt Zahlen aber Buchstaben eingebe, werden sie gespeichert. Ansonsten mit Zahlen werden sie nicht gespeichert und verschwindet sofort.
2 Antworten
Die Ursache zu dieser Fehlermeldung hat clnus2 bereits beschrieben. Diesen Fehler kannst du also ignorieren. Dein wesentliches Problem wird eher sein, dass du das Formular mit Klick auf den Button auch absendest und der Nutzer somit das Ergebnis der Berechnung nicht mehr sehen wird.
Zwei Lösungen bieten sich dafür an.
a) Du änderst das type-Attribut des Buttons:
<button id="069" type="button" value="069"> druck berechne </button>
b) Du unterbindest den Default-Handler in deiner Funktion btnfk.
function btnfk() {
window.event.preventDefault();
// ...
An dieser Stelle solltest du zudem noch ein paar Fehler beheben.
1) Deine Labels verweisen mit ihren for-Attributen auf Elemente, die nicht existieren. Beachte, dass der Wert mit dem Wert des id-Attributs des Zielelements identisch sein muss. Statt also bspw.
<label for="aufgabe1">Aufgabe 1:</label>
<input type="number" name="Augabe1" id="a">
müsste es so aussehen:
<label for="a">Aufgabe 1:</label>
<input type="number" name="Augabe1" id="a">
2) Nach deinem schließenden html-Element fügst du die vorherigen fünf Zeilen nochmals an sowie ein zweites schließendes html-Tag. Vielleicht ist aber auch beim Kopieren (hinein in GF) etwas schief gegangen.
3) Den Rechtschreibfehler im Seitentitel solltest du korrigieren (Lieblingsprofessor - beide Wörter werden zusammengeschrieben) und auf dem Button wäre eine andere Bezeichnung auch passender (z.B. nur Berechne o.ä..). Falls das Drücken des Buttons tatsächlich als Aufforderung dort stehen soll, müsste es schon Drücke heißen (Drücke mich, um die Berechnung zu starten).
Nein, musst du nicht, wenn du eine meiner beiden Lösungsoptionen durchführst.
Mir sind im Übrigen noch ein paar weitere Dinge aufgefallen. Keine direkten Fehler, aber es wäre besser, sie zu ändern.
1) Das zweite Eingabefeld ist kein Nummernfeld, so wie die anderen.
2) Wieso du diese Variable
let global = 0;
ganz am Ende des Skripts definierst, verstehe ich nicht. Sie wäre besser nach der Initialisierung von note aufgehoben, wo du an der Stelle eine globale Variable definierst. Ein anderer Name, der ihre Funktion zudem eindeutig beschreibt, wäre ebenfalls gut.
3) Dieser letzte Punkt bezüglich deines gewählten Bezeichners trifft aber auch noch auf andere Elemente zu (wieso bspw. die 5 am Ende von note? Wieso heißen die Eingabefelder a, b, c, d oder aufgabe1, aufgabe2, ..., wenn sie aber doch Noten beinhalten sollen - so jedenfalls meine Vermutung). Und so weiter.
4) Bei den mehreren if-Anweisungen wäre es besser, ein if-else if zu verwenden. Du weißt doch, dass nur ein Fall eintreten wird. Im besten Fall wird so also nur eine Bedingung geprüft. Derzeit werden in jedem Fall alle Bedingungen ausgeführt, auch wenn es gar nicht mehr notwendig ist.
Das ist ein Bug in Microsoft Edge, der kommt von der automatischen Formularvervollständigung. Wenn das der einzige Fehler ist, ist dein Code eigentlich okay.
Wenn du einen anderen Browser (Chrome, Firefox, ...) verwendest, sollte das nicht passieren.
Ansonsten kannst du die Formularvervollständigung bei Microsoft Edge hier ausstellen:
Menu -> Settings -> Passwords & autofill
(Habs gerade nur auf englisch aus dem Internet kopiert, weil ich selber kein Edge habe)
Hier die Quelle:
danke, habe gerade auf Chrom versucht, habe versucht mit Menu -> Settings -> Passwords & autofill.
geht leider trotzdem nicht
Bekommst du denn den gleichen Fehler oder einen anderen Fehler in Chrome?
Den Fehler aus deiner Frage habe ich ausschließlich im Zusammenhang mit Edge gefunden.
Dankeschön, dass du dir Zeit fürs Antworten genommen hast.
Es funktioniert jetzt. Aber ich musste auch BUTTON aus </fieldset>
</form>
rausholen und dannach einfügen.