Radio und Textarea werden bei Fehler wieder disabled
inspiron
- javascript
0 inspiron0 inspiron
Hallo,
ich habe da ein kleines Problem.
Wenn die Checkbox aktiviert wird, werden Radio und Textarea ent"disabled" ;)
Tritt beim Submit, der Überprüfung, ein Fehler auf, werden Radio und Textarea wieder "disabled" obwohl die Checkbox noch aktiv ist.
Versuch:
Was ich schon hinbekommen habe, nach betätigen des Submitbutton wir abgefragt ob Checkbox enable oder disable ist. Bei enable müsste jetzt "style.backgroundColor = "#ffffff";" reinkommen.
Wie schreibe ich das?
Gruß
<?php header ('Content-Type: text/html; charset=utf-8');
error_reporting(E_ALL);
//-----------------------------------------------
/* Fehlerauswertung */
$errorFelder = array();
$error = null;
$felder = array("beschreibung");
// start Überpruefung der Eingabe
if(isset($_POST['ueberpruefung'])) {
$error = false;
foreach($felder as $feld) {
if("" ==($_POST[$feld]) or "*" ==($_POST[$feld]) or "Bitte auswählen!" ==($_POST[$feld])) {
$error = true;
$errorFelder[$feld] = true;
}
}
}if($error === false) {
echo "<b>Alles i.O.!</b>";
} else {
if($error === true)
echo "<b>Bitte alle Felder ausfüllen!</b>";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>test</title>
<style type="text/css">
textarea {
width: 200px;
height: 50px;
background-color: #f3f8fb;
}
</style>
<script type="text/javascript">
function DoTheCheck() {
if(document.myform.check1.checked == true)
document.myform.......style.backgroundColor
{ alert('box1 ist aktiviert'); }
if(document.myform.check1.checked == false)
{ alert('box1 ist deaktiviert'); }
}
function gesperrt(chk){
var felder = new Array('radio1', 'radio2', 'beschreibung');
var i;
if(document.getElementById){
for (i=0; i<felder.length; i++)
if(chk){
document.getElementById(felder[i]).style.backgroundColor = "#ffffff";
document.getElementById(felder[i]).disabled = false;
}
else {
document.getElementById(felder[i]).style.backgroundColor = "#f3f8fb";
document.getElementById(felder[i]).disabled = true;
}
}
}
</script>
</head>
<body>
<form name="myform" method="post" accept-charset="utf-8" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>">
<!-- Element 1 -->
<input type="checkbox" name="check1" id="check1" onclick="gesperrt(this.checked)" value="ON" <?php if(isset($error) and $_POST['check1'] == "ON") {echo "checked";} ?> />
<!-- Element 2 -->
<label for="radio1">Ja
<input type="radio" name="radio" id="radio1" value="JA" disabled='disabled'/>
</label>
<!-- Element 3 -->
<label for="radio2">Nein
<input type="radio" name="radio" id="radio2" value="NEIN" checked="checked" disabled='disabled'/>
</label>
<!-- Element 4 -->
<textarea name="beschreibung" id="beschreibung" disabled='disabled'<?php if(isset($errorFelder['beschreibung'])) echo 'class="error"'; ?>><?php echo ($_POST['beschreibung']);?></textarea>
<!-- UI Button -->
<input type="hidden" name="ueberpruefung" value="1">
<input type="submit" id="submitButton" name="submitButton" value="Speichern" onClick="DoTheCheck()" />
</form>
<?php
}
?>
</body>
</html>
Wie schreibe ich das?
Gruß
Damit komme ich auch nicht weiter :(
<script type="text/javascript">
function DoTheCheck() {
if(document.myform.check1.checked == true){
alert('Box1 ist aktiviert');
var felder = new Array('radio1', 'radio2', 'beschreibung');
var i;
if(document.getElementById){
for (i=0; i<felder.length; i++)
if(chk){
document.getElementById(felder[i]).style.backgroundColor = "#ffffff";
document.getElementById(felder[i]).disabled = false;
}
}
}
if(document.myform.check1.checked == false){
alert('Box1 ist deaktiviert');
}
}
function gesperrt(chk){
var felder = new Array('radio1', 'radio2', 'beschreibung');
var i;
if(document.getElementById){
for (i=0; i<felder.length; i++)
if(chk){
document.getElementById(felder[i]).style.backgroundColor = "#ffffff";
document.getElementById(felder[i]).disabled = false;
}
else {
document.getElementById(felder[i]).style.backgroundColor = "#f3f8fb";
document.getElementById(felder[i]).disabled = true;
}
}
}
</script>
...hat denn keiner eine Idee?
Om nah hoo pez nyeetz, inspiron!
...hat denn keiner eine Idee?
Merk dir den Zustand vor Beginn der Überprüfung und stell ihn im Fehlerfall wieder her.
Matthias
Om nah hoo pez nyeetz, inspiron!
...hat denn keiner eine Idee?
Merk dir den Zustand vor Beginn der Überprüfung und stell ihn im Fehlerfall wieder her.
Matthias
...ich habe es jetzt so gelöst, was auch funktioniert.
Gruß
function DoTheCheck() {
var felder = new Array('radio1', 'radio2', 'uhrzeit', 'dauer', 'beschreibung', 'massnahme');
var i;
if(document.getElementById){
for (i=0; i<felder.length; i++)
if(document.myform.check1.checked == true){
document.getElementById(felder[i]).style.backgroundColor = "#ffffff";
document.getElementById(felder[i]).disabled = false;
//alert('Funktion Check1 ist aktiviert');
}
if(document.myform.check1.checked == false){
document.getElementById(felder[i]).style.backgroundColor = "#f3f8fb";
document.getElementById(felder[i]).disabled = true;
//alert('Funktion Check1 ist deaktiviert');
}
}
}
<body onload="DoTheCheck();">
Hallo,
if(document.myform.check1.checked == true)
"wenn es wahr ist, dass document.myform.check1.checked wahr ist ..."
Warum so umständlich? Einen Ausdruck, von dem man bereits weiß, dass er nur true oder false sein kann, nochmals explizit mit einem dieser Werte zu vergleichen, nur um wiederum true oder false zu bekommen, ist sinnfrei und macht den Ausdruck schwerer zu lesen.
Warum nicht einfach:
if (document.myform.check1.checked) ...
Und ein paar Zeilen weiter:
if(document.myform.check1.checked == false)
Dasselbe in Grün. Verständlicher und einfacher:
if (!document.myform.check1.checked) ...
Abgesehen davon ist in deinem Code nicht einmal eine erneute Prüfung nötig, sondern einfach nur ein else-Zweig. Wenn der oben geprüfte boolsche Wert nicht true ist, muss er false sein, eine erneute if-Abfrage mit komplementärer Bedingung ist unnötig.
Es gibt Fälle, wo der explizite Vergleich auf true oder false Sinn ergibt - nämlich dann, wenn der untersuchte Ausdruck auch einen anderen Typ als Boolean haben könnte. In Javascript fällt mir im Moment kein Beispiel dazu ein, aber in PHP kommt das oft vor. Da gibt es zahlreiche Funktionen, die im Erfolgsfall einen Zahlenwert liefern (der auch 0 sein kann), im Fehlerfall aber ein boolsches false.
Um solche Fälle richtig zu erfassen, braucht man aber zusätzlich einen typsicheren Vergleich, also mit dem Operator === oder !==.
Ciao,
Martin