Variable kann in Funktion nicht geändert werden
Thomas E.
- javascript
0 ChrisB0 Der Martin
Hallo!
Ich hänge mal wieder an einem Problem fest und komm nicht weiter. Ich schreib grad ein Programm, welches lineare Gleichungssysteme lösen soll (in Form einer Matrix). Auf der Startseite kann der Benutzer eingeben wie groß die Matrix sein soll:
<div id='startForm'>
<form name='MatrixParam'>
<p><input type=text name=anz_zeilen value=m size=1 maxlength=2 class=inputFieldMatrixSeize /> x
<input type=text name=anz_spalten value=n size=1 maxlength=2 class=inputFieldMatrixSeize /> Matrix</p>
<button type=button onClick='checkMatrix()'>Erstellen</button>
</form>
</div>
Auf Knopfdruck wird dann die JS-Funktion (welche in einer externen JS-Datei liegt) aufgerufen. Vorher werden in der Javascriptdatei noch zwei Variablen deklariert, damit der Feldinhalt in ihnen gespeichert werden kann und global zugänglich ist:
var anzSpalten = 0.0;
/* ich weiße den Variablen diese Werte nur probeweise zu. Da Problem tritt immer auf - egal ob ich der Variable hier schon einen Wert zuweise oder nicht. */
var anzZeilen = 0.0;
function checkMatrix()
{
anzSpalten=document.MatrixParam.anz_spalten.value;
anzZeilen=document.MatrixParam.anz_zeilen.value;
... prüfen ob die Eingaben valide sind ....
{
drawMatrix();
}
}
Mit drawMatrix() wird nun ein Eingabeinterface für die Matrix erzeugt. (mit document.write() )
Am Ende des Eingabeinterfaces ist ein Button, der die Funktion solve() startet. Allerdings braucht diese Funktion die Anzahl der Spalten und Zeilen:
function solve()
{
alert(anzSpalten);
..usw.
Allerdings hat die Variable anzSpalten hier immer noch den Startwert von ganz oben. Oder falls sie nur deklariert wurde den Wert "undefined".
Wo ist der Fehler? Wie kann ich den Textfeldinhalt der Startseite dauerhaft - für alle Funktionen abrufbar - abspeichern?
MfG Thomas
Hi,
Mit drawMatrix() wird nun ein Eingabeinterface für die Matrix erzeugt. (mit document.write() )
Wenn du document.write in einer Funktion benutzt (bzw. generell nach dem initialen Laden des Dokuments), ueberschreibst du damit das komplette Dokument.
MfG ChrisB
Wenn du document.write in einer Funktion benutzt (bzw. generell nach dem initialen Laden des Dokuments), ueberschreibst du damit das komplette Dokument.
Wie kann ich das umgehen?
Hi,
Wenn du document.write in einer Funktion benutzt (bzw. generell nach dem initialen Laden des Dokuments), ueberschreibst du damit das komplette Dokument.
Wie kann ich das umgehen?
In dem du's bleiben laesst :-)
Beschaeftige dich mit der dynamischen Erzeugung von DOM-Knoten (createElement, appendChild, ...) - oder innerHTML, wenn's fuer den Anfang simpler sein soll.
MfG ChrisB
Hi,
abgesehen von deinem funktionellen Problem, auf das ChrisB dich ja schon aufmerksam gemacht hat, ist in jedem Fall dein HTML fehlerhaft:
<div id='startForm'>
<form name='MatrixParam'>
Hier weißt du noch, dass Attributwerte in Anführungszeichen stehen sollten.
<p><input type=text name=anz_zeilen value=m size=1 maxlength=2 class=inputFieldMatrixSeize /> x
Und dann hast du es plötzlich vergessen.
Aber beim Ansehen deines Codeauszugs frage ich mich als erstes, ob du nun HTML oder XHTML schreibst. Die Notation der input-Elemente mit dem "/>" zum Schließen deutet auf XHTML hin. Dann *müssen* aber die Attributwerte in Anführungszeichen stehen, ...
<button type=button onClick='checkMatrix()'>Erstellen</button>
... und alle Attributnamen werden grundsätzlich klein geschrieben. Durchgehend.
Solltest du dagegen "normales" SGML-basiertes HTML schreiben, ist die Notation "/>" zum Schließen leerer Elemente falsch, und die beiden MUSS-Regeln, die ich erwähnt habe, werden zu SOLL-Regeln.
Mit drawMatrix() wird nun ein Eingabeinterface für die Matrix erzeugt. (mit document.write() )
Wenn dir die Alternativen (DOM, innerHTML), die ChrisB vorschlägt, immer noch zu kompliziert sind, könntest du als "Triviallösung" die Ausgabe auch in ein textarea-Element schreiben, das du vorher im HTML-Code notierst. Das ist nicht wirklich elegant, aber dafür einfach zu handhaben.
So long,
Martin