Radiobuttons enablen und disablen über Checkbox?

jscholtysik

Grünschnabel
Hallo,

SelfHTML und SelfPHP sind zur Zeit meine Standardlektüren. Leider haben sie mir bei meinem Problem nicht helfen können.Deshalb meine Anfrage(n).

Ich habe folgendes Problem :

Ich habe ein Formular, das eine Checkbox enthält, die den Wert Drucker hat. Unterhalb dieser Checkbox habe ich zwei Radioboxen definiert, die die Werte Lokaler Drucker und Netzwerkdrucker haben.
Die Radioboxen sind mit HTML-Attribut disabled deaktiviert und sollen nur aktiviert werden, wenn die Checkbox angeklickt wird. Dazu habe ich den onClick-Event-Handler verwendet.

So sieht zur Zeit mein Codeschnippsel so aus :

<td width="2%"><INPUT type="checkbox" name="drucker" value="Einrichtung eines Druckers" onClick="return Enable();"></td>
<td width="39%" colspan="2" valign="center"><b>Einrichtung eines Druckers</td>

<script type="text/javascript">
<!--
function Enable()
{
if(document.formular.drucker.checked) {
document.formular.drucker2[0].disabled = false;
document.formular.drucker2[1].disabled = false;
}
elseif {
document.formular.drucker2[0].disabled = true;
document.formular.drucker2[1].disabled = true;
}
}
</script>

Wenn ich die Checkbox aktiviere, erhalte ich nur links unten im IE6 "Fehler auf der Seite" und die Radiobuttons bleiben deaktiviert.

Zeile : 136
Zeichen : 1
Fehler : Objekt erwartet
Code : 0
URL : Dateiname

Die Checkbox heisst drucker, die Radiobuttons-Gruppe mit zwei Radiobuttons drucker2.

Wie krieg ich es so hin, dass wenn die Checkbox selektiert wird, die zwei Radiobuttons enabled werden und wenn die Checkbox deselektiert wird, die Radiobuttons auch wieder disabled werden, d.h. quasi der Zustand "geswitched" wird?

Danke im voraus.
 
Hi :)

An deinem Code fallen mir drei Dinge auf:

1)
Warum öffnest du einen Kommentar, aber schließt ihn nicht? :)

2)
Es gibt kein Konstrukt der Struktur elseif {}, denn elseif verlangt genauso wie if Parenthesen mit einer zugehörigen inständigen Vergleichsanweisung.
Willst du keinen weiteren Vergleich laufen lassen, dann musst du mit else arbeiten, elseif erwartet jedenfalls noch eine weitere.

3)
Im onClick-Handler hast du die Anweisung "return Enable()" stehen.
Heißt es wird die Funktion "Enable" aufgerufen, deren Rückgabewert dann mit return für den Handler weiterverwertet werden soll.
Erstens gibt deine Funktion aber in keinster Weise einen Rückgabewert, und zweitens würde dieser Rückgabewert zusammen mit dem return-Schlüsselwort auch nichts im EventHandler bewirken, da du damit keinen Standard/default-Event canceln könntest, bzw. bestätigen könntest.

return kann man da also durchaus weglassen, macht zumindest für mich augenscheinlich keinen Sinn. :)
PHP:
<script type="text/javascript" language="JavaScript">
<!--

function Enable() {
    if (document.formular.drucker.checked) {
        document.formular.drucker2[0].disabled = false;
        document.formular.drucker2[1].disabled = false;
    } else {
        document.formular.drucker2[0].disabled = true;
        document.formular.drucker2[1].disabled = true;
    }
}

//-->
</script>

...

<input type="checkbox" name="drucker" value="Einrichtung eines Druckers" onClick="Enable();">
<b>Einrichtung eines Druckers</b>
<br>
<input type="radio" name="drucker2" disabled>&nbsp;Lokaler Drucker<br>
<input type="radio" name="drucker2" disabled>&nbsp;Netzwerkdrucker<br>
hth,
Geist
 
Ich hab so ziemlich das selbe Problem, nur funktioniert das bei mir nicht ganz. Bei mir sieht die Eingabe der Daten nämlich so aus:

PHP:
<script type="text/javascript" language="JavaScript">
<!--

function Enable() {
    if (document.sell.versandwahl.checked) {
        document.sell.payment[][0].disabled = false;
        document.sell.payment[][1].disabled = false;
    } else {
        document.sell.payment[][0].disabled = true;
        document.sell.payment[][1].disabled = true;
    }
}

//-->
</script>

Versand innerhalb Deutschland:
<input type="checkbox" name="versandwahl" value="1" onClick="Enable();"> Möglich<br>
<br>
Bezahlung:
<input type="checkbox" name="payment[]" disabled>&nbsp;Scheck<br>
<input type="checkboy" name="payment[]" disabled>&nbsp;Überweisung<br>
...

Bei mir kommt immer ein Syntaxfehler. Ich weiß mittlerweile, dass es am [ ] beim namen liegt. Ich kann es aber nicht rausmachen, da sonst das ganze PHP-Script nicht mehr richtig funktioniert.
Kann ich es im Java-Script irgendwie übergehen oder gibt es da gar keine Chance?
 
@drzoldberg

Probiers mal so :)
Code:
function Enable() {
    if (document.sell.versandwahl.checked) {
        document.sell.elements['payment[]'][0].disabled = false;
        document.sell.elements['payment[]'][1].disabled = false;
    } else {
        document.sell.elements['payment[]'][0].disabled = true;
        document.sell.elements['payment[]'][1].disabled = true;
    }
}
 
Der Syntaxfehler ist weg. Jetzt heißt es "Bezeichner erwartet". Wenn ich die Seite dann aktualisiere ist der Fehler weg.
Und wenn ich dann die Checkbox anklicke heißt es "Objekt erwartet".

Trotzdem danke für die Antwort.
Ich glaube es liegt auch etwas an meinem PHP-Script. Falls trotzdem noch jemand Hilfe weiß, wäre ich sehr dankbar.
 
checkbox.disabled?

Also ich spreche meine Checkboxen mit .checked und nicht mit .disabled an. In der HTML-Specifikation konnte ich für ein ähnliches Problem das ich hatte kein 'enabled' finden. Ergo funktionierte auch diesunddas.disabled =false; nicht.
Ich überschreibe derarte Checkboxen dann etwa so mit einem checked=false statt .disabled:

Code:
document.form.fettdruck.checked 	= false;
document.form.gallery.checked 	= false;
document.form.topgallery.checked 	= false;
document.form.bildpaket.checked 	= false;

!document.form.bildpaket.checked; // wär das gleiche....

PS: Da steht checkboy statt checkbox...
PSS: Wieso soll eine checkbox deaktiviert sein? oder soll sie einfach nur 'unchecked' sein? Das ist was anderes....
 
Zuletzt bearbeitet:
Erst mal im Info: Ich hab ein kleines Auktionshaus. Und auf meiner Artikel-Einstellen-Seite kann der Benutzer Versandmöglichkeiten auswählen.
Also so will ich das haben:
Ich hab drei Versandmöglichkeiten: Selbstabholer, Versand innerhalb Deutschland, Versand innerhalb Europa. Bei jeder einzelnen Versandart kann der
Benutzer wählen ob möglich oder nicht möglich. Erst wenn er angiebt "möglich" sollen die Checkboxen freigegeben werden um die Bezahlmöglichkeiten (z.B. Überweisung, Scheck...)
einzugeben. Wenn er auf nicht möglich geht, sollen die Checkboxen auch nicht freigegeben werden, sodass der Benutzer
nicht irgendwie irritiert wird und er meint, dass er da trotzdem was eingeben muss.

PS: Das da Checkboy steht ist nicht so schlimm, da ich das Script von meiner Seite nur mal so im groben abgeschrieben hab.

Meine Seite: Geeg.de
Um die Seite zu sehen, müsst ihr euch aber erst anmelden und dann auf "Verkaufen" gehen. Unter dem Feld Beschreibung hab ich dann extra einen
kleinen Link angebracht: Admin-Bereich. Da seht ihr dann die geplante Seite.

Und noch was: ich hab das Script jetzt etwas umgeschrieben. So was ähnliches hab ich nämlich gestern noch auf der Seite gefunden:

PHP:
  <script language="JavaScript" type="text/javascript">
<!--
function feld_sperren()
{
 with(document.sell){
   if(versands[0].checked){
     document.sell.['payment2[]'][0].disabled = false;
   }
   else {
     document.sell.['payment2[]'][0].disabled = true;
   }
 }
}
//-->
</script> 
<TR>
  <TD WIDTH="204" VALIGN="top" ALIGN="right">
   <B><? print $std_font ?>Selbstabholer<br></font>
   <?
     print $grn_font."(erforderlich)"."</Font>";
   ?>
   </B>
  </TD>
  <TD WIDTH="*"><? print $std_font ?><input type="Radio" name="versands" value="1" onClick="feld_sperren();">&nbsp;möglich
 <input type="Radio" name="versands" value="2" onClick="feld_sperren
();">&nbsp;nicht möglich</font><div align="left"><hr noshade style="width:220px; color:black; height:1px;"></div>
  <? print $TPL_payments_list2; ?>
  </TD>
</TR>
Statt dem print $TPL_payment_list2 muss man sich die versch. Checkboxen
vorstellen. Die werden alle in einem PHP-Script erzeugt.
So etwa:
PHP:
<INPUT TYPE=CHECKBOX NAME="payment2[]" VALUE="Barzahlung"> <FONT FACE="Arial,Helvetica" SIZE="2"> Barzahlung</FONT><br><INPUT 
TYPE=CHECKBOX NAME="payment2[]" VALUE="Scheck"> <FONT FACE="Arial,Helvetica" SIZE="2"> Scheck</FONT><br><INPUT 
TYPE=CHECKBOX NAME="payment2[]" VALUE="Siehe Artikelbeschreibung"> 
<FONT FACE="Arial,Helvetica" SIZE="2"> Siehe Artikelbeschreibung</FONT><br>
 
Zuletzt bearbeitet:
Kannst du dich mit sowas anfreunden?

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
	<head>

		<title></title>
		<script><!--
			
			function feld_sperren(){

				if (document.form.Versand.value == 'Abholen'){
					document.form.box.disabled = true;
					document.form.taube.disabled = true;
				}

				if (document.form.Versand.value == 'Versand'){
					document.form.box.disabled = false;
					document.form.taube.disabled = false;
				} 
			}

		//--></script>

	</head>
	<body>

		<script><!--

			document.writeln("<form name='form'><select value='Lieferung' onChange='feld_sperren();' id='Versand' name='Versand'><option>Versand<\/option><option>Abholen<\/option><\/select><input type='checkbox' id='box'>Paket<input type='checkbox' id='taube'>Brieftaube<\/form>");

		//--></script>

	</body>
</html>
 
Zuletzt bearbeitet:
Zurück