# Submit aktivieren wenn radiobutton markiert ist ...



## RonneldMcDonald (7. September 2003)

Hallihallo,

Ich möchte gern verhindern, dass im Formular aus Spass herumgeklickt  bzw abgesendet wird, ohne etwas zu markieren bzw auszuwählen ...
Mals abgesehen von den Prüfscripten möchte ich diese erst gar nicht nutzen, sondern in diesem konkreten Beispiel (votingscript) muss ein radio gewählt werden - klaro! Wie kann ich den Submitbutton solange deaktivieren bis eine Option ausgewählt ist.
Wenn ich schon mal dabei bin, würde ich anschliesend natürlich auch gleich den Button wieder deaktivieren, um Klickabhängige von Ihrer Sucht zu kurieren ...

RMD ;-)


----------



## Andreas Gaisbauer (7. September 2003)

Hallo,

versuch mal:
	
	
	



```
<html>
<head>
  <script type="text/javascript">
  function enable(){
    document.formular.submit.disabled = false;
  }
  </script>
</head>
<body onLoad="document.formular.submit.disabled = true">
  <form name="formular">
    <input type="radio" name="radio1" onchange="enable()"/>
    <input type="radio" name="radio1" onchange="enable()"/>
    <input type="radio" name="radio1" onchange="enable()"/>
    <input type="radio" name="radio1" onchange="enable()"/>
    
    <input type="submit" name="submit" />
  </form>
</body>
</html>
```

bye


----------



## RonneldMcDonald (7. September 2003)

Hallo und Danke fürs erste, Hauptproblem damit geklärt, jedoch ist das Ganze nicht so funktionell, wie ichs mir vorstelle ...

der Button ist deaktiviert - okay,

klicke ich jetzt einen radio an, bleibt der submit immer noch disabled und er wird erst beim Anklicken aktiv, was er ja aber sofort nach Aktivieren des Radiobuttons sein solllte! Woher soll sonst ein unerfahrener User wissen, dass er jetzt anklicken darf ...?
Und zudem ist nach dem Abschicken der Button weiter aktiv ...

Noch ne Lösung?


----------



## Andreas Gaisbauer (7. September 2003)

Hallo,

Hmmm sorry, kann ich nicht ganz nachvollziehen. Sobald ich auf einen Radio Buttom clicke ist der Submit  sofort aktiv - nicht erst später. Sobald ich das Forumlar abschicke ist er bei mir auch wieder deaktiviert.... 

bye


----------



## RonneldMcDonald (7. September 2003)

... habe onchange in onclick geändert, damit funktioniert die sofortige Aktivierung des Buttons ...

muss jetzt noch die disabled-Funktion hinkriegen, soll also heissen, den Button wieder zu deaktivieren, sobald das Formular abgesendet wurde, vielleicht mit 500ms Verzögerung, um dem Script "Zeit zugeben", alles erstmal wegzuschicken! Oder ?


UUps da hast du wohl schon mittendrin geantwortet ...
naja keine ahnung warum das so bei mir nicht geht ... Vieleicht liegt es daran, dass das Formularscript über eine required php-datei in die eigentliche Seite eingebettet wird, somit muss ich das Javascript in die Hauptseite reinschreiben und die Formularangaben in die php-Funktionsdatei ... 

Wie gesagt mit Onclick gehts, was jetzt noch fehlt ist halt die anschliessende deaktivierung ...
Hab mir das obige nochmal angeguggt und kann auch nicht erkennen, wo das ausgelöst wird, bei Submit den Button wieder zu aktivieren ...?


----------



## Andreas Gaisbauer (7. September 2003)

HAllo nachmal,

versuch mal follgende alternatve:

```
<html>
<head>
  <script type="text/javascript">
  function enable(){
    document.formular.submit.disabled = false;
  }
  </script>
</head>
<body>
  <form name="formular" onSubmit="document.formular.submit.disabled = true; return true;">
    <input type="radio" name="radio1" onclick="enable()"/>
    <input type="radio" name="radio1" onclick="enable()"/>
    <input type="radio" name="radio1" onclick="enable()"/>
    <input type="radio" name="radio1" onclick="enable()"/>
    
    <input type="submit" name="submit" disabled />
  </form>
</body>
</html>
```

sollte funktionierten


bye


----------



## RonneldMcDonald (8. September 2003)

Na danke soweit, das klappt schon mal ganz gut - ahnte ich doch, dass da die disabled-anweisung irgendwo noch fehlte ;-) Jetzd das berühmte AAABER! ;-)

Das disablen des Buttons wird aber wieder aufgehoben, sobald man wieder einen Radiobutton anklickt, das ist ja dann auch nicht gerade das Gelbe vom Frühstücksei ... also irgendwie müsste man da nochwas deaktivieren ... So siehts bisher aus:
	
	
	



```
<html>
<head>
<title></title>
  <script type="text/javascript">
  function enable(){
    document.umfrage.submit.disabled = false;
  }
  </script>
</head>
<body> 
<table border="0" cellpadding="0" cellspacing="2" width="160">
<form name="umfrage" action="" method="post" target="m2" onSubmit="document.umfrage.submit.disabled = true; return true;">
<input type="radio" name="option" value="1" onclick="enable()">bla
<input type="radio" name="option" value="2" onclick="enable()">bsld
<input type="radio" name="option" value="3" onclick="enable()">bbjh
<input type="submit" value="Stimme abgeben" disabled="disabled">
</form>
</body>
</html>
```

An welcher stelle müsste ich das noch mit einbauen: 
	
	
	



```
document.umfrage.submit.value='Du hast abgestimmt'
```
also das der deaktivierte Button dann einen anderen Text bekommt ..

Grüße RMD


----------



## Andreas Gaisbauer (8. September 2003)

Ich glaub wir reden die ganze Zeit aneinader vorbei


> muss ein radio gewählt werden - klaro! Wie kann ich den Submitbutton solange deaktivieren bis eine Option ausgewählt ist. Wenn ich schon mal dabei bin, würde ich anschliesend natürlich auch gleich den Button wieder deaktivieren


das heißt für mich :
1) Deaktiviert
2) Radio anktivieren
3) Abschicken
4) Deaktivieren

nach deinem letzten Post denke ich aber du möchtest

1) Deaktiviert
2) Radio anktivieren
3) Abschicken
4) Label ändern
5) "für immer" Deaktivieren

Um das wirklich sicher zu machen, solltest du mit der IP (mit PHP) arbeiten oder mit Cookies arbeiten. Ein Beispiel mit Cookies folgt:


```
<html>
<head>
<script type="text/javascript">
<!--
var done=0;

function cookie_setzen()
{
  document.cookie = "vote=done";
  alert("cookie wurde gesetzt");
}


function cookie_lesen()
{
  if(document.cookie){
    var cookie = document.cookie;
    var begin = cookie.indexOf('=');
    var length = cookie.lenght;
    cookie = cookie.substring(begin+1,length);
    document.umfrage.submit.disabled = true;
    document.umfrage.submit.value = 'Du hast abgestimmt';
    done=1;
  }else{
    document.umfrage.submit.value = 'Stimme abgeben';
  }
}


function enable(){
  if(done==0){
    document.umfrage.submit.disabled = false;
  }
}


</script>
</head>

<body onLoad="cookie_lesen()">

<table border="0" cellpadding="0" cellspacing="2" width="160">
<form name="umfrage" action="" method="post" target="m2" 
onSubmit="document.umfrage.submit.disabled = true; cookie_setzen(); return true;">
<input type="radio" name="option" value="1" onclick="enable()">bla
<input type="radio" name="option" value="2" onclick="enable()">bsld
<input type="radio" name="option" value="3" onclick="enable()">bbjh
<input type="submit" value="Stimme abgeben" name="submit" disabled="disabled">
</form>
</body>
</html>
```

ciao - hoffe das wir nicht wieder aneinander vorbei geschrieben haben...


----------



## RonneldMcDonald (8. September 2003)

Eine schöne Woche erstmal ;-)
Naja so ganz "aneinander vorbei" wars ja nicht ;-) Ist ja schon was bei rausgekommen ...
Ich muss zugeben, dass ich da bissl blueäugig rangegangen bin und gedacht habe, dass man meine "Wünsche" unabhängig (vom eigentlichen Script) realisieren kann, aber du hast mich durchschaut;-) nee mal im Ernst: Du hast natürlich Recht, dass es darum geht den User daran zu hindern mehrere Stimmen abzugeben und den anhand der IP oder cookie zu identifizieren - daher sollte der Button natürlich für eine Zeit gesperrt sein. Also das ganze ist ja so, dass es dafür ja im Hintergrund schon ein PHP-Code gibt, der die Values und IP's ausliest - variable in der config.inc: 
	
	
	



```
$tab_pip    =$tabpref."user_ip";      //Letzte IP / Vote
```
, die in die DB eingetragen wird. Der PHP- Abschnitt des Votingscript und "unseren " bisherigen Änderungen am Formular sieht per PHP so aus: ;-)
	
	
	



```
if ($pfpoll["$cookiename-$poll[id]"] != 1) {

echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"2\" width=\"$pollbreite\">
      <form name=\"umfrage\" action=\"$ppollurl/vote.php?id=$poll[id]\" method=post target=\"$ptoframe\" onSubmit=\"document.umfrage.submit.disabled = true; return true;\">
      <input type=hidden name=redirect value=\"$PHP_SELF\">
      <tr><td class=\"infomini\" colspan=\"2\">$poll[frage]</td></tr>";

$sqlbefehl= "Select * FROM $tab_pdata where pollid=$poll[id] order by auswahl";
$getoptions  = mysql_query($sqlbefehl, $serverid);

while ($options= mysql_fetch_array($getoptions)) {
if ($tdclass == "odd") { $tdclass="even"; }
else  { $tdclass="odd"; }

   echo "<tr><td class=\"$tdclass\"><input type=radio name=option value=\"$options[id]\" onclick=\"enable()\"></td><td class=\"$tdclass\">$options[auswahl]</td></tr>";

}

echo "<tr><td class=\"abstimmen\" colspan=\"2\" align=\"center\"><input style='font-size:9px' type=\"submit\" name=\"submit\" value=\"Stimme abgeben\" disabled=\"disabled\"></td></tr></form></table>";

}

else .... Ergebnisse ....
```
In der Standard-Scriptfassung ist diese Klicksperre nur mit einem labidaren TextHinweis im Targetframe ( "du hast schon gevotet...") gelöst, was mir eben zu simple ist ...
Man möchte ja immer irgendwie das etwas andere Formular, daher fiel mir das noch mit der Labeländerung ein ...

Sorry, wenn ich da gedacht habe, dass es einfacher geht - ich wollte es ja nicht unbedingt schwieriger machen, dachte ich als Scriptdummy zumindest ...

Gruß RMD

Anmerkung: mir fällt hier im Forum immer wieder sehr unangenehm auf, dass ich trotz 1024x768 Px beim Lesen und schreiben von Posts fast die Hälfte zusätzlich horizontal scrollen muss, das nervt wahnsinnig, woran liegt das?


----------



## Andreas Gaisbauer (8. September 2003)

> _Original geschrieben von RonneldMcDonald _
> *Eine schöne Woche erstmal ;-)
> (...)
> Man möchte ja immer irgendwie das etwas andere Formular, daher fiel mir das noch mit der Labeländerung ein ...
> ...


Auch dir eine schöne Woche 
Das wichtigste zuerst: Funktionierts jetzt so wie du wolltest?
Zum Srolling: das liegt an den [ code ] bzw [ php ] tags. Diese Tags verhindern u.a. den Zeilen umbruch was das ganze ziemlich unleserlich macht.  Also bei langen Codezeilen am besten selbst einen Umbruch einbauen, oder auf die beiden tags verzichten.

bye


----------



## RonneldMcDonald (8. September 2003)

Also ich habe deinen letzten Code mit cookiescript noch nicht eingebaut, weil ich erstmal deine Reaktion auf meinen Post abwarten wollte. hätte ja sein können, dass Du mir jetzt verbal den Popo versohlst, weil ich nicht gleich alles so formuliert hatte, wie es angebracht gewesen wäre ...

Dein Javascript einzusetzen würde (denke ich) bedeuten, einen neuen Cookie zu setzen und das möchte ich ja auch nicht, da ja das php-script schon einen setzt und benutzt.
Kann man den nicht mit deiner lösung als variable ansprechen bzw. auslesen? Siehe hier:
	
	
	



```
if ($pfpoll["$cookiename-$poll[id]"] != 1) {
```
 wenn ich davon nur bissl Ahnung hätte ...


----------



## Andreas Gaisbauer (9. September 2003)

> dass Du mir jetzt verbal den Popo versohlst, weil ich nicht gleich alles so formuliert hatte


also bitte, das hab ich doch gar nicht gemacht, wenns so rüberkam -> sorry    

Zur Cookie Geschichte: Ja grundsätzlich kann man das Cookie mit JS auslesen - aber ich denke das ist gar nicht mehr nötig. 
Ihr schaut ja mit PHP ob if ($pfpoll["$cookiename-$poll[id]"] != 1)  ist - wenn das so ist, wird das Formular geschrieben. Wenn das Cookie sagt, es wurde gevotet, dann lass doch einfach mit PHP das deaktiverte Formular (also ohne onClick="enable()" und anderem Lable)  ausgeben. 

bye


----------



## RonneldMcDonald (9. September 2003)

Hi Andreas, na Du bist lustig ;-) sagte ich noch nicht, zu PeHaPe und JavaScript ziemlich unterbemittelt zu sein? ich kann zwar ab und zu erkennen, dass es bei manchen Codefragmenten um irgendwas geht, aber wie das zusammenspielt und was wie voneinader abhängig ist, das wird mir wohl immer ein Rätsel bleiben ... somit weiss ich überhaupt nicht was Du mir mit diesem Satz beinbringen möchtest:





> dann lass doch einfach mit PHP das deaktiverte Formular (also ohne onClick="enable()" und anderem Lable) ausgeben.





> Ihr schaut ja mit PHP ob if ($pfpoll["$cookiename-$poll[id]"] != 1) ist


 was heisst hier IHR - denkst Du etwa, dass ich damit was programtechnisch zu tun habe? Nee leider nicht, ich bin nur ein Nutzer, das script ist von Powie.de und in deren Freakforum da hat mir bisher keiner zu meinen Änderungswünschen ein ernsthaftes Ohr geschenkt ... daher dachte ich mal, es hier zu probieren, was ja schon freundlicherweise passiert ist.

Insgesamt gesehen, ist es ja auch wiederum nicht SOOO wichtig, dass ich und vor allem du Dir dafür den Kopf zerbrechen müsstest, es ist ja vielmehr mein nimmermüder Drang, in freien Minuten an Scripten rumzubasteln und das eine oder Andere benutzerfreundlicher zu machen sprich an meine Vorstellungen anzupassen ...

Also falls Du jetzt nicht restlos die Backen dicke hast, kannst Du mir ja eventuell in Deiner freien Minute diesen Ausgabecode genauer angeben ...

Gruß Ron


----------



## Andreas Gaisbauer (9. September 2003)

Sorry, hät dir gerne geholfen.  Wenn ich am Wochenede Zeit finde werde ich mir das Script mal installieren und versuchen was man da machen kann - habs schon mal runtergeldaen und überflogen - ist aber doch ziemlich umfangreich. Also ich schau am WE mal was ich machen kann... Wenn ich was rausfinde poste ich´s nochmal hier...

bye


----------



## RonneldMcDonald (9. September 2003)

Puh! Es gibt Sie noch die Selbstlosen! danke soweit ...

cu later ... ron


----------



## Warper (9. Oktober 2003)

*Problem*

Habe das hier eben durchgeackert. zumindestens die ersten Posts, da diese mir für mein Anliegen eigentlich ausreichen würden.

Ich will nur einen submit Button deaktivieren bis jemand eine Auswahl bei einem Dropdownmenü gemacht hat (<select>).

dies klappt in einer einzelnen test.html einwandfrei mit dem obigen code.

Nur wenn ich es in meine Zielseite packe funktionierts nicht mehr. Ich finde einfach nicht heraus warum. Bitte helft mir.


```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>

...
Titel
CSS
...

<script type="text/javascript">
function enable(){
	document.warenkorb.submit.disabled = false;
	}
</script>

</HEAD>

<body onLoad="document.warenkorb.submit.disabled = true">



...
HTML CODE
...
						<tr>
							<td width='100' class='row1' valign='top'><a href='fotos/'>		</td>
							<td width='600' class='row1'>
							<table border='0' cellspacing='0' cellpadding='5'>		<tr>
								<td width='100' class='row2' valign='top'>Weinart:</td>
								<td width='400' class='row2' valign='top'>Roséwein</td>
							</tr>		<tr>
								<td width='100' class='row1' valign='top'>Füllmenge:</td>
								<td width='400' class='row1' valign='top'><form name='warenkorb' method='post'>		<select class='text' name='fuellmenge_id' onchange="enable()"><option value='2'>0,75l Flasche</option><option value='3'>1l in a Box</option>		</select>			</td>
							</tr>		<tr>
								<td width='100' class='row2' valign='top'></td>
								<td width='400' class='row2' valign='top'><input type='hidden' name='ADD_ID' value='79'><input type='submit' value='In den Warenkorb' />
								</form>
								</td>
							</tr>
							</table>
							</td>
						</tr>	</table><br>	</td>
</tr>

...
HTML CODE
...

</HTML>
```

Ist eine ziemlich umfangreiche PHP Seite, von der ich den Ausgabe-Quelltext ausm IE kopiert habe.
Bitte helft mir.

BTW: Einen möglichen Fehler möchte ich ausschließen. es gibt nur dieses eine Formular auf der Seite mit dem name=warenkorb.

Danke schon einmal im Vorraus. warper


----------



## Warper (9. Oktober 2003)

Oh man, hat sich erledigt... trotzdem danke!


----------

