• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Probleme mit Eventhandler/selbst definierte Funktionen

HKSimi

New member
Hallo,

ich bin neu hier im Forum sowie in Javascript, deshalb entschuldigt mich wenn ich was falsche mache oder etwas länger zum Verstehen brauche. Ich habe folgendes Problem: Ich habe ein Formular erstellt, wobei einige Inputs sowie der Body mit Eventhandler versehen sind, die eine von mir definierte Funktion ausführen sollen. Hier sind die Funktionen im Head:

HTML:
<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>

<link rel="stylesheet" href="Eingabe.css">



<title>Anmeldung</title>

<script language="javascript" type="text/javascript">

function Aktivieren(){
         if (document.forms[0].Bedarfsgemeinschaft.checked){
             document.forms[0].sonstiges.disabled = false;
         } else {
             document.forms[0].sonstiges.disabled = true;
			
         }
		 }
		 
function Aktivieren1(){
         if (document.forms[0].Niveau.checked){
             document.forms[0].Sprache.disabled = false;
         } else {
             document.forms[0].Sprache.disabled = true;
			
         }
		 }

   
function deaktivieren(){
         document.forms[0].Sprache.disabled=true;
		 document.forms[0].sonstiges.disabled=true;
    }

</script>



</head>

<form action = "T_Eingaben.php" method ="post" name ="Anmeldung" id ="Anmeldung" onsubmit ="return chk()">

<body onload ="deaktivieren()";>

Die Inputs:

HTML:
<input type="checkbox" id="Bedarf" name="Bedarf" value="Ja" onclick ="Aktivieren()"> 

<input type="radio" id="A1" name="Niveau" value="A1" onclick ="Aktivieren1()"> <label>A1</label>
	
 <input type="radio" id="A2" name="Niveau" value="A2" onclick ="Aktivieren1()"> <label>A2</label>

 <input type="radio" id="B1" name="Niveau" value="B1" onclick ="Aktivieren1()"> <label>B1</label>
	
<input type="radio" id="B2" name="Niveau" value="B2" onclick ="Aktivieren1()"> <label>B2</label>
	 
<input type="radio" id="C1" name="Niveau" value="C1" onclick ="Aktivieren1()"> <label>C1</label>
	
<input type="radio" id="C2" name="Niveau" value="C2" onclick ="Aktivieren1()"> <label>C2</label>

Komischerweise funktioniert der Eventhandler im Body. Kann mir einer helfen? Danke :)
 
Du hast da mehrere Probleme.

Zu allererst hast du nicht geschrieben, was denn genau dein Problem ist. Also welches Verhalten du erwartest und welches du statt dessen beobachtest.
Deswegen muss ich dazu erst einmal raten: ich gehe davon aus, dass irgendwelche <input>s nicht enabled werden, obwohl sie das sollten. Das liegt wahrscheinlich daran, dass du mehrere <input>s mit dem Name "Niveau" hast. Prinzipiell ist das auch kein Problem, ABER FORM.Niveau liefert dann kein einzelnes Element sondern eine Collection aller <input>s - deswegen existiert darauf dann auch nicht die Eigenschaft .checked. Um dieses Problem zu lösen musst du über diese Collection iterieren und prüfen, ob irgendein <input> angehakt ist:
Code:
if ([].slice(document.forms[0].Niveau).some(function(niveau){
	return niveau.checked;
})){
	...
}

K.A. wie das bei Bedarfsgemeinschaft ist - da sehe ich das HTML nicht

Zu guter letzt hast du noch ein paar Unsauberkeiten:

dein HTML ist invalide. Validiere das erst einmal. (Besonders eine DocType sollte rein).
Außerdem ist ein <label> ohne Bezug auf ein anderes Element eher sinnfrei.

PS: das language-Attribut ist veraltet -> weg damit.
 
Danke für deine ausführliche Antwort! Da hast du korrekt getippt, ich möchte dass sich zwei Textfelder beim Aufrufen des Dokuments deaktivieren siehe Bodytag. Sobald jemand beim Niveau (Sprachniveau) etwas anklickt, sollte er auch eine Sprache wählen dürfen, solange bleibt es ausgegraut. Genau eigentlich bei der Bedarfsgemeinschaft, aber da hast du mich schon auf den nächsten Fehler aufmerksam gemacht ^^ der name im input ist einfach nicht der gleiche wie in der Funktion.
Nur, ich habe noch nicht die Logik hinter dem Iterieren verstanden und die If Abfrage noch weniger. Wäre wirklich nett, wenn du mir das nochmal erklärst.
Die Validierung schreib ich dann auch rein und language wird gestrichen. Danke!
 
Sind die Sprachen auch wieder Radioboxen? Zeig' doch mal dein komplettes HTML (nachdem du es validiert hast).

Schau' dir einfach mal die Funktionen ARRAY.slice() (Hinweis: hier wird die HTML-Collection zu einem Array umgewandelt) und ARRAY.some() an.
 
Zurück
Oben