Homepage selbermachen 7.852 Themen, 35.619 Beiträge

JavaScript-Problem: Wert von einer Variable nicht veränderbar

Lönie / 7 Antworten / Baumansicht Nickles

Hallo Leute, ich soll für Informatik ein Projekt vorstellen, und ich habe mir eine Art Eignungstest vorgestellt. Die Werte werden in diversen input type="radio" und select-Feldern eingegeben, die dann von der Funktion Kanal() ausgewertet werden.

Ich hatte mir das so gedacht, dass man einen bestimmten Punkt anklickt, worauf die Variable ein paar Punkte zugerechnet bzw. abgezogen bekommt. Der AM ENDE feststehende Wert soll als Grundlage für die Ausgabe dienen. Hier die Funktion:

"function Kanal()
{
var Punktzahl = 0 ; <- die Variable mit Anfangswert


if(document.Test.Geschlecht[0].checked==true) ; <- für die Antwort gibt's Punkte
{Punktzahl=Punktzahl+2} ;
if(document.Test.Geschlecht[1].checked==true) ; <- für diese allerdings nicht
{Punktzahl=Punktzahl-2} ;

if(Punktzahl<0)
{Ausgabe="Sie sind ungeeignet"} <- Auswertung u. Ausgabe

document.Test.Auswertung.value=Ausgabe ;
}"

Punktzahl wird allerdings zu keiner Zeit verändert, denn

"if(Punktzahl==0)
{Ausgabe="Sie sind ungeeignet"}"

funktioniert.
Wer kann mir helfen?

bei Antwort benachrichtigen
asterix5 Lönie „JavaScript-Problem: Wert von einer Variable nicht veränderbar“
Optionen

Beseitige erstmal die gröbsten Fehler ...

1.)
if(document.Test.Geschlecht[0].checked==true) ;
das ";" hinter der Abfragebedingung falsch

2.)
{Punktzahl=Punktzahl-2} ;
das ";" gehört innerhalb der geschweiften Klammern direkt hinter die Anweisung

... und dann teste nochmal.

Als angehender Informatiker solltest Du solche Fehler aber selbst finden, zB durch den Einbau von alert-Anweisungen.




\"Als ich nach Deutschland kam, sprach ich nur Englisch - aber weil die deutsche Sprache inzwischen so viele englische Wörter hat, spreche ich jetzt fließend Deutsch!\" (Rudi Carrell)
bei Antwort benachrichtigen
xafford Lönie „JavaScript-Problem: Wert von einer Variable nicht veränderbar“
Optionen

Das abschließende Semikolon wurde als Fehler ja schon angesprochen... das ist syntaktisch falsch, aber das ist nicht der Fehler mit der Punkteberechnung. Der Fehler liegt im Geltungsbereich von Variablen.

Wenn Du eine Variable mit "var" innerhalb einer Funktion deklarierst, so ist diese Variable lokal in ihrem Geltungsbereich. Sie ist also innerhalb einer Funktion nicht sichtbar und verfügbar. Ebensowenig ist diese statisch zwischen einzelnen Funktionsaufrufen. Der zweite Aufruf der Funktion weiß nichts über den Wert der Variablen aus dem ersten Aufruf.

Deklariere die Varíable Punktzahl also außerhalb der Funktion, dann kann ihr Wert auch über Funktionsaufrufe hinweg genutzt werden.

Ich würde mal sagen, Du bist durchgefallen ;o)

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Lönie xafford „Das abschließende Semikolon wurde als Fehler ja schon angesprochen... das ist...“
Optionen

Höhö, ich gehe in die 10. Klasse, aber egal^^
Wollt ich nur so mal hinzufügen..

Die Ausrufezeichen und Semikolons sind von Nickles, der erste Beitrag sah am Anfang nämlich noch so aus:

Hallo Leute, ich soll für Informatik ein Projekt vorstellen, und ich habe mir eine Art Eignungstest vorgestellt. Die Werte werden in diversen "input-Kreis" "select-Feld" und das war's. Nickles hat das dann irgendwie in Text formatiert..

"Deklariere die Varíable Punktzahl also außerhalb der Funktion, dann kann ihr Wert auch über Funktionsaufrufe hinweg genutzt werden."

Also so?

var Punktzahl = 0

function Kanal()
{
...
}

Ich werd's mal probieren, danke!



bei Antwort benachrichtigen
Lönie Nachtrag zu: „Höhö, ich gehe in die 10. Klasse, aber egal Wollt ich nur so mal hinzufügen.....“
Optionen

&lt;script language="JavaScript"&gt;

var Punktzahl=0 ;

function Kanal()

{
if(document.Test.Geschlecht[0].checked==true) ;
{Punktzahl=Punktzahl+2} ;
if(document.Test.Geschlecht[1].checked==true) ;
{Punktzahl=Punktzahl-2} ;

if(Punktzahl==0)
{Ausgabe="Hallo!"}
document.Test.Auswertung.value=Ausgabe ;
}
&lt;/script&gt;

Es wird weiterhin "Hallo!" ausgegeben..
Wer kann mir helfen? NICHTS funktioniert!

bei Antwort benachrichtigen
xafford Lönie „ lt script language JavaScript gt var Punktzahl 0 function Kanal if...“
Optionen

Wie sieht denn dein Formular aus? In welchem Browser testest Du das? Nimm mal folgenden Code:

var Punktzahl=0;

function Kanal()
{

var opt1 = document.getElementsByName("Geschlecht")[0];
var opt2 = document.getElementsByName("Geschlecht")[1];
var res = document.getElementsByName("Auswertung")[0];

if( opt1.checked==true )
{
Punktzahl += 2;
}
else if( opt2.checked==true )
{
Punktzahl -= 2;
}

res.value = Punktzahl;

}


und folgendes Formular:

<form name="Test">
<input type="radio" name="Geschlecht" />
<input type="radio" name="Geschlecht" />
<input type="text" name="Auswertung" />
<input type="button" onclick="javascript:Kanal();" value="auswerten" />
</form>

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Lönie xafford „Wie sieht denn dein Formular aus? In welchem Browser testest Du das? Nimm mal...“
Optionen

Holy Moly O.O
Browser ist Firefox, V.3.0

Nach deiner Methode müsste ich also für jeden einggebbaren Wert eine Variable definieren..
Was ziemlich viel Arbeit wäre (s. unten).
Nur funktioniert dein Script, und meins nicht.
Also an die Arbeit.


Das (Ursprungs-)Script:

<html>
<head>
<title>Eignungstest - Seite 1</title>
<script language="JavaScript">
function Kanal()
{
var Punktzahl = 0 ;

if(document.Test.FeldAlter.value<80) ;
if(document.Test.FeldAlter.value<50) ;
if(document.Test.FeldAlter.value<20) ;
{Punktzahl=Punktzahl+0} ;
else {Punktzahl=Punktzahl+2} ;
else {Punktzahl=Punktzahl-2} ;
else {Punktzahl=Punktzahl-4} ;


if(document.Test.Geschlecht[0].checked==true) ;
{Punktzahl=Punktzahl+2} ;
if(document.Test.Geschlecht[1].checked==true) ;
{Punktzahl=Punktzahl-2} ;

if(document.Test.Beziehung.selectedIndex==0) ;
{Punktzahl=Punktzahl+2} ;
if(document.Test.Beziehung.selectedIndex==1) ;
{Punktzahl=Punktzahl+1} ;
if(document.Test.Beziehung.selectedIndex==2) ;
{Punktzahl=Punktzahl+0} ;
if(document.Test.Beziehung.selectedIndex==3) ;
{Punktzahl=Punktzahl-4} ;
if(document.Test.Beziehung.selectedIndex==4) ;
{Punktzahl=Punktzahl-2} ;

if(document.Test.BereichBeruf.selectedIndex==0) ;
{Punktzahl=Punktzahl+4} ;
if(document.Test.BereichBeruf.selectedIndex==1) ;
{Punktzahl=Punktzahl+2) ;
if(document.Test.BereichBeruf.selectedIndex==2) ;
{Punktzahl=Punktzahl-2} ;
if(document.Test.BereichBeruf.selectedIndex==3) ;
{Punktzahl=Punktzahl+0} ;
if(document.Test.BereichBeruf.selectedIndex==4) ;
{Punktzahl=Punktzahl-4} ;

if(document.Test.Hund.selectedIndex==0) ;
{Punktzahl=Punktzahl+0} ;
if(document.Test.Hund.selectedIndex==1) ;
{Punktzahl=Punktzahl+2} ;
if(document.Test.Hund.selectedIndex==2) ;
{Punktzahl=Punktzahl-4} ;
if(document.Test.Hund.selectedIndex==3) ;
{Punktzahl=Punktzahl-2} ;
if(document.Test.Hund.selectedIndex==4) ;
{Punktzahl=Punktzahl+4} ;

if(document.Test.TausendEuro.selectedIndex==0) ;
{Punktzahl=Punktzahl-2} ;
if(document.Test.TausendEuro.selectedIndex==1) ;
{Punktzahl=Punktzahl-4} ;
if(document.Test.TausendEuro.selectedIndex==2) ;
{Punktzahl=Punktzahl+2} ;
if(document.Test.TausendEuro.selectedIndex==3) ;
{Punktzahl=Punktzahl+4} ;
if(document.Test.TausendEuro.selectedIndex==4) ;
{Punktzahl=Punktzahl+0} ;

if(document.Test.Klo.selectedIndex==0) ;
{Punktzahl=Punktzahl+2} ;
if(document.Test.Klo.selectedIndex==1) ;
{Punktzahl=Punktzahl+0} ;

if(Punktzahl<0) ;
{Ausgabe="Dummes Kind!"} ;

document.Test.Auswertung.value=Ausgabe ;
}
</script>
</head>

-----------------------------------------------

Das da unten ist das gesamte Formular..

<body>
<form name="Test">
Auf dieser Seite wird ihnen für den <a name="oben">Anfang</a> erst wenig abverlangt.
<br>
Bitte geben sie in dieses Feld ihr tatsächliches Alter in Jahren an:
<p>
<input type="text" name="FeldAlter" size="3">
<p>
Sind sie:
<p>
<input type="radio" name="Geschlecht" value="Nr1"> &nbsp Männlich
<br>
<input type="radio" name="Geschlecht" value="Nr2"> &nbsp Weiblich
<p>
Sind sie...
<p>
<select name="Beziehung">
<option value="Nr1"> Verheiratet
<option value="Nr2"> verlobt
<option value="Nr3"> ledig
<option value="Nr4"> homosexuell
<option value="Nr5"> allein
</select>
<p>
In welchem Bereich übten sie früher ihren Beruf aus?
<p>
<select name="BereichBeruf">
<option value="Nr1"> Technik
<option value="Nr2"> Soziales
<option value="Nr3"> Beamtenwesen
<option value="Nr4"> Naturwissenschaften
<option value="Nr5"> arbeitslos
</select>
<p>
So, diesen langweiligen, aber notwendigen Abschnitt hätten wir hinter uns. Kommen wir nun zu
<b>Sektion 1</b>: Persönliches!
<p>
FRAGE 1
<br>
Sie fahren Fahrrad auf einer einsamen Straße. Sie sehen einen armen Hund am Straßenrand liegen.
<br>
Was tun Sie?
<p>
Ich... &nbsp
<select name="Hund">
<option value="Nr1"> fahre vorbei und tue nichts
<option value="Nr2"> bleibe stehen und habe Mitleid
<option value="Nr3"> überfahre ihn
<option value="Nr4"> führe dem Hund ein Tänzchen vor
<option value="Nr5"> ziehe mich nackt aus, beschmiere mich mit Senf und warte
</select>
<p>
FRAGE 2
<br>
Sie erhalten überraschenderweise 1000 €. Was tun sie damit?
<p>
Ich... &nbsp
<select name="TausendEuro">
<option value="Nr1"> tue das Geld in meine Spardose / auf mein Konto / unter die Matratze
<option value="Nr2"> verprasse alles an einem einzigen Abend
<option value="Nr3"> erfülle mir damit einen lang gehegten Traum
<option value="Nr4"> verbrenne die Scheine, weil ich Konsum und Kapitalismus abgrundtief verabscheue
<option value="Nr5"> spende sie eine gemeinnützigen Organisation
</select>
<p>
FRAGE 3
<br>
Ihr Klo ist verstopft. Sie sind einarmig und blind. Wie gehen Sie vor?
<p>
Ich... &nbsp
<select name="Klo">
<option value="Nr1"> will einen Klempner rufen, finde die Nummer aber nicht
<option value="Nr2"> habe die Nummer, finde aber das Telefon nicht
<option value="Nr3"> versuche, es selbst zu reparieren, finde aber das Klo nicht
<option value="Nr4"> folge dem Gestank und löse das Problem mit einer Handgranate
<option value="Nr5"> folge dem Gestank, benutze den VAKUUM-FLEX 3000 und muss daraufhin 2 Tage später von der Feuerwehr von dem Spülbecken befreit werden
</select>
<p>
Das haben sie bereits sehr gut gelöst! Kommen wir nun zu <b>Sektion 2</b>: Dem Kanal-Quiz!
<p>
FRAGE 1
<br>
Ein Kanaldeckel mit der Lötung "2X-3f15" darf nur wie geöffnet werden?
<p>
<input type="radio" name="Quiz1" value="Nr1"> &nbsp Man benutzt seine Fingernägel
<br>
<input type="radio" name="Quiz1" value="Nr2"> &nbsp Mit einer Brechstange der Kennung "22"
<br>
<input type="radio" name="Quiz1" value="Nr3"> &nbsp Mit der obigen Brechstange in Kombination eines Lötschlüssels der Kennung "LötLord"
<br>
<input type="radio" name="Quiz1" value="Nr4"> &nbsp Man ruft Buddha zu Hilfe und betet um geistige Unterstützung
<p>
FRAGE 2
<br>
Wie entnimmt man korrekt eine Kotprobe?
<p>
<input type="radio" name="Quiz2" value="Nr1"> &nbsp Man steckt sich den Finger dahin wo die Sonne nie scheint und riecht
<br>

<input type="radio" name="Quiz2" value="Nr2"> &nbsp Man destilliert 256 Gramm Schweine-Exkrement bei 449,28 °C im Backofen bei Mitternacht
<br>
<input type="radio" name="Quiz2" value="Nr3"> &nbsp Man untersucht den isolierten Feces auf Einschlüsse, Klarheit der Farbe, Geschmack und Geruch
<br>
<input type="radio" name="Quiz2" value="Nr4"> &nbsp Man badet in der Kläranlage
<p>
FRAGE 3
<br>
Mit welchem Gerät wird Kot der Dichte von 2,3 g/cm³ und einem Schmelzpunkt von 78°C entfernt?
<p>
<input type="radio" name="Quiz3" value="Nr1"> &nbsp Mit Klopapier
<br>
<input type="radio" name="Quiz3" value="Nr1"> &nbsp Mit Hammer und Meißel
<br>
<input type="radio" name="Quiz3" value="Nr1"> &nbsp Mit einer Vakuumpumpe der Kennung "56-B"
<br>
<input type="radio" name="Quiz3" value="Nr1"> &nbsp Mit einem Tintenkiller von "Pelikan"
der Marke "Super Pirat"
<p>
HERZLICHEN GLÜCKWUNSCH!!!
<br>
Sie haben nun den gesamten Test bearbeitet!
<br>
Klicken Sie nun bitte auf den unteren Knopf, um ihre Bewertung zu lesen:
<p>
<input type="button" value="Klick mich bitte in die Mitte" onclick="Kanal()">
<p>
<p>
<p>
<input type="text" name="Auswertung" size="100">
<p>
<a href=#oben>nach oben</a>
<br>
<a href="SeiteAnfang.html">Zur Startseite</a>
</form>
</body>

bei Antwort benachrichtigen
Lönie Nachtrag zu: „Holy Moly O.O Browser ist Firefox, V.3.0 Nach deiner Methode müsste ich also...“
Optionen

Also, xafford..
Du hast mir bereits so grundlegendes Zeugs klargemacht, und dein script ist toll. Allerdings funktioniert der Mist schon wieder nicht, wenn ich in dein script eine zusätzliche ifBedingung einbaue, zB

if(res.value==6)
{Ausgabe="Heissa!"}

Dann tut sich gar nichts mehr :(
Mein Infolehrer hilft auch nicht wirklich weiter
(zu stur bzw. beschränkt)..
Bin nahe dran am Aufgeben.
Sch****!

bei Antwort benachrichtigen