Camping_RIDER: radio button aktivieren in <div> container

Beitrag lesen

Aloha ;)

zu tabellarischen Daten.
ich ignoriere gar nichts, glaub mir das einfach mal.
Es kann jedoch sein das ich eine Antwort überlese oder nicht mitbekam... sorry
[...]
auch sorry hierfür

Akzeptiert. Entschuldige meine genervte Reaktion, das war auch nicht ganz korrekt.

Aber nun zur Sache...
und Danke für Deine Geduld

Kein Problem ;)

Wenn ich onchange  verwende dann muss ich doch das in jedem inputfeld dann habe ich doch die gleiche code-menge und noch mehr evtl.
Noch dazu muss ich den Zustand des radios abfragen bei jedem onchange

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

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

onclick musst du außerdem auch jetzt schon bei jedem inputfeld (bzw. dem zugehörigen Radio-Button) benutzen. Im Optimalfall reduziert sich deine Codemenge sogar drastisch, da du das ganze in einer einzigen Funktion in einem <script>-Bereich oder (noch besser) in einer externen Javascript-Datei zentralisieren kannst, a la

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

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);">

Das bläht die Sache also nicht auf, sondern - im Gegenteil - macht sie schlanker und lesbarer. BTW: Ob sich die Codemenge aufbläht oder nicht wäre so oder so kein Argument, da der Funktionalitätsbenefit eines onchange über ein onclick in diesem Fall deutlich mehr wiegen sollte als der reine einmalige Coding-Aufwand.

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, und dann (diesmal in beliebiger Reihenfolge) JavaScript und PHP. Und mit Verstehen meine ich nicht, alles mögliche schonmal gelesen/gesehen zu haben. Da gehört viel Übung dazu ;) War bei keinem hier anders...

Wenn ich schon den ganzen Schlonz drin habe und der onclick funktioniert (natürlich nur bei klick)

geht es dann nicht das ich aktiv beim laden des Containers dann diesen klick auslöse so das er die zellen sperrt?

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:

//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);  

aus zwei Sätzen werde ich leider nicht schlau

Ist okay. Hoffe, das war genug Beispiel ;)

Grüße,

RIDER

** 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.

--
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[