selfmade01: radio button aktivieren in <div> container

Beitrag lesen

Hallo,

wow, vielen Dank für diese ausführliche Beschreibung.

Das Abfragen des Zustandes ist einfach. Das beläuft sich auf

if (this.checked) { ....disabled=false; } else { ....disabled=true; }

ich glaub das ich jetzt so langsam dahinter komme.
dazu unten mehr

in einer externen Javascript-Datei zentralisieren kannst, a la

Ja, mit den richtig korrekt geschrieben functions bestimmt nur besonders in javascript (da hatte ich mich früher schon davor geflüchtet.

Als ich mit zwei anderen Berufsprogrammieren früher mal an einer Webablikation (war damals sowas ähnliches wie googlemail )geschraubt habe hatte ich mich nur ums Frontend mit php und einer mysql dahinter gekümmert und das in einem 20std/7 Tage Job auf ein Jahr. aber das ist ewig her und bis auf ein paar php und mysql Sachen ist nicht viel hängen geblieben. Der Aufbau der Webseite war auch im ganz banalen html ohne css . Die es später nutzen hatten es nicht gemerkt :) und sauber sah es auch noch aus.

**Bitte meinen Kommentar GAAANZ unten dazu noch lesen...

den habe ich ganz aufmreksam gelesen

function radioSelect (radio,triggerAll) {

if (radio.checked) { radio...disabled=false; } else { radio...disabled=true; }

//Das folgende brauchst du weil -> Kommentar **
    if (triggerAll) {
        var elms = document.getElementsByName(this.name);
        for (var i = 0; i < elms.length; i++) { radioSelect(elms[i],false); }
    }
}


>   
> und im html dann  
>   
> `<input type="radio" name="..." onchange="radioSelect(this,true);">`{:.language-html}  
>   

hier habe ich fast alles verstanden und kann es sehr gut nachvollziehen und auch sofort erkennen das es weniger Aufwand ist. danke  
  
Aber...  
genau das hier  
  
~~~javascript
  
{ radio...disabled=false; }  

sowie ich das verstehe prüft er den einen bestimmten radio button ab ob er ausgewählt wurde dann
fragt er triggerAll all ab (muss mal sehn was das ist, werde ich schon im netz finden, kein problem!) und ermittelt so alle getElementsByName name="xyz1"od name="xyy1" und setzt diese auf false , also sperrt diese eingabefelder oder?
Frage:
da er aber doch somit alle Felder ermittelt würde auch alle Felder sperren ?
ich möchte aber nur 4 on den 8 Feldern sperren

Du schreibst das hier in zwei Sätzen auf und ein Anfänger soll daraus schlau werden

Tja, das hat schon seine Gründe :D Wenn du mir die Bemerkung gestattest: Ein Anfänger sollte sich nicht übernehmen. Wenn du tatsächlich ein Anfänger bist, dann hast du den Griff zu JavaScript / PHP zu schnell gemacht :D Beim Lernen gilt eigentlich: Ein Stückchen nach dem Anderen. Zunächst HTML verstehen, dann CSS,

Ja, da hast Du wohl recht und glaube mir, damals als ich vor über 15 Jahren mal über 1 Jahr lang hardcore hinterm pc mir php und mysql reingezogen hatte musste ich meine Berufsprogrammiereer immer mit einigen Bier bei Laune halten da ich sie echt nervte... aaaaber nach ca 3 Monaten war ich ziemlich drin und brauchte sie nur ab und an.

Mein großes Manko ist.
Ich brauche Beispiele ... ich muss das nachvollziehen können..
Vor kurzem hatte mir jemand ein Beispiel mit Ajax gegeben wie ich eine Seite nachladen kann.
Das war genial.. bis vor kurzem konnte ich mit dem teil sehr viel machen und es auch nach wunsch abändern... so lerne ich dazu und begreife es mehr und mehr.

ich muss mich da ganz einfach hart reinarbeiten und muss auch wohl viele Profis nerven.. ich weiss ja wie ich lerne.. der eine liest ein paar zeilen und kapiert es dann und ich muss es an Beispielen sehen....Nur wenn ich es dann kapiert habe und weiter drauf aufbaue, dann kracht es bei mir richtig durch und ich kann sehr sehr viel damit anstellen.. aber es dauert bis ich es gefressen habe.

Aber mit ein paar code-brocken bzw. mit zwei wörtern die auf eine javascript anweisung hindeuten... phooo da bin ich total überfordert... das reicht mir in php.. aber in javascript und noch dazu vielleicht in jquery dieser total verqueren programmierlogik da streck ich die Flügel.
Wenn ich mal noch ein/zwei Monate hinter mir habe dann bin ich vielleicht schon ein bisschen besser drin.
Aber bis dahin muss ich ja ein wenig weiter kommen

Doch, schon. Sogar ganz einfach, wenn du es so machst wie von mir vorgeschlagen. Grundsätzlich ist ja immer maximal ein Input aktiviert (wenn ich dich richtig verstanden habe). Die Lösung ist also in etwa so möglich:

Eben nicht... das ist ja das Problem.alle 8 inputs sind aktiviert und das ist der Mist.

Es werden doch immer nur Div-container nachgeladen. Einer davon beinhaltet die radio-buttons

tzzz diese kann ich zwar mit checked vorselektieren. Der Button leuchtet dann auch wunderbar, aber das juckt die Eingabefelder nicht... der User kann trotzdem reinschreiben..
Erst wenn der user  den onclick angewendet hat (sofern er so schlau war und diesen entdeckt hat) also bei klick auf den radio-button dann werden auch die felder gesperrt und genau das wollte ich automatisieren so dass von anfang (also schon beim laden der div container mit den radios die ja auch geladen werden ) an schon bestimmte felder gesperrt sind und der user zum klicken auf die radios gezwungen wird falls er woanders was eintragen will

die container die geladen werden sehen so aus

  
  
  
  
  
echo '<form name="form'.$week.'" action="#" >';// form habe ich nur wegen der radios  
  
==> bis hier hin ist die erste zeile  
inklusive des form-tags und der bereits geladenen zeilen inkl. der bereits pro zeile bestehenden radio-buttons  
  
</div>  
  
der öffnende Form-tag wird nur einmal bei der ersten zeile geladen !!!!  
  
  
ab hier werden neue Zeilen geladen und der rest der vorhandene Container wird gelöscht  
da sind nur noch der addnewrow-button und das schliessende form-tag sowie der schliessende div-tag die gelöscht und durch das folgende ersetzt werden  
  
echo '<div class="col_12">';//macht die Pseudotabelle bzw. pseudo-zeile auf 1200px breit  
echo '<div><input type="radio" id="test1'.$woche.'" checked="checked"></div>';  
echo '<div><input type="radio" id="test2'.$woche.'" checked="checked"></div>';  
echo '<div><input type="number" step="0.01" min="0" max="99.99" id="phBMin'.$week.'" name="phBMin'.$week.'"></input></div>  
..../hier kommen noch 7 solcher <input>  
  
echo '</form>';  
echo '<div>.... hier kommt noch der addnewrow-botton der wird auch mit geladen da der alte gelöscht wird</div>';  
echo '</div>';  
  

so ungefähr sieht das aus was ständig nachgeladen wird

//beim Laden einer neuen Zeile...

//alle Radios aus (dazu reichts den ersten an und dann wieder aus zu machen!
// -> Ungewöhnlich, aber wirkungsvoll
document.getElementsByName('RADIO-NAME')[0].checked = true;
document.getElementsByName('RADIO-NAME')[0].checked = false;
// und dessen onchange nochmal einzeln manuell feuern, weil Kommentar
radioSelect(document.getElementsByName('RADIO-NAME')[0],false);

  
ok das sieht gut aus  
  
aaaaber  
  
wenn ich die radios mit getElementsByName('RADIO-NAME')[0] anspreche... mmmhh  
wie ist das dann wenn ich wie oben im code sichtbar als name="radio" habe und ich bei jedem laden nur 2 radios habe so habe ich doch immer die gleichen array-werte oder?  
also  
radio[0] und radio[1}  
diese habe ich bei Zeile 1, 2 ,3 und bei jeder neu ´dazu kommenden zeile  
  
Da ich kein echtes Formular habe brauche ich das form-tag nur für die radio-buttons (so dachte ich)  
die eingetragene werte der <input> felder sende ich eh alle über ajax und einem php-script zur Datenbank  
  
  

>   
>   
> \*\* KOMMENTAR: Leider verhält sich onchange nicht so, wie ich es gerne hätte und wie ich es logisch fände. Laut meinen Tests und einer längeren Googlesuche ist es so, dass onchange leider nur beim Anwählen eines Radio-Buttons feuert, beim Abwählen passiert leider nicht die Bohne. Für mich nicht logisch, aber so ist es halt.  
>   
> Hinweis für Fortgeschrittene: Stattdessen könne man wohl auch das onchange der Radio-Gruppe abfangen und darin die Select-Funktion für alle Radio-Member abfeuern. Sicherlich eleganter als mein "einfacher" Workaround hier.  
  
  
ich werde das obige Beispiel von dir mal probieren und gebe dann bescheid ob ich zurecht kam.  
  
Grüße Jürgen