Hannes Weninger: checkboxen disablen wenn radio klicked und umgekehrt

Hallo,

ich habe folgendes versucht in meinem jsfiddle- Beispiel:

My Fiddle

In meinem realen Beispiel ist es so, dass die Anzahl der radio buttons und checkboxes unbekannt ist. Wenn man ein checkbox klickt, sollen alle radiobuttons (type="radio" und name="x") deselected werden, wenn ein radioButton geklickt wird, dann soll es umgekehrt sein.

Kann mir da vielleicht jemand weiter helfen. Ich hänge beim foreach, da ist this[type] undefined und ich weiß nicht, wie ich die Elemente mit einem bestimmten type und name durchlaufe.

Danke! Hannes

  1. @@Hannes Weninger

    My Fiddle

    Was mir als erstes auffällt: Weder die Radiobuttons noch die Checkboxen haben eine Beschriftung. Sie sind kaum bedienbar, beim Clicken passiert nichts. Kannst du das mal bitte ändern?

    Als zweites fällt mir auf, dass das Posting im Archiv verstümmelt ist. Ich habe zwar die Berechtigung, Postings zu bearbeiten, aber nicht die Berechtigung, Postings zu bearbeiten. Der alltägliche Unsinn – ihr kennt das.

    Als nächstes fällt auf, das der Eintrag im Wiki dringend überarbeitungsbedürftig ist. IIRC stand in der alten Doku drin, dass Labels erforderlich sind, damit auch darauf clicken kannn. Warum ist das verlorengegangen?

    LLAP 🖖

    --
    Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
    1. Tach,

      Als zweites fällt mir auf, dass das Posting im Archiv verstümmelt ist. Ich habe zwar die Berechtigung, Postings zu bearbeiten, aber nicht die Berechtigung, Postings zu bearbeiten.

      es wäre auch nicht sinnvoll, die Daten des Archivs liegen im alten Forenformat vor; dementsprechend ist die korrekte Lösung, die Anpassung der Konvertierung, nicht die Anpassung des Postingquelltextes.

      mfg
      Woodfighter

    2. Servus!

      Als nächstes fällt auf, das der Eintrag im Wiki dringend überarbeitungsbedürftig ist. IIRC stand in der alten Doku drin, dass Labels erforderlich sind, damit auch darauf clicken kannn. Warum ist das verlorengegangen?

      keine Ahnung, ist es jetzt besser? Wiki: label

      Im Artikel zu den Checkboxen war es schon drin.

      LLAP 🖖

      Herzliche Grüße

      Matthias Scharwies

  2. Tach!

    Kann mir da vielleicht jemand weiter helfen. Ich hänge beim foreach, da ist this[type] undefined und ich weiß nicht, wie ich die Elemente mit einem bestimmten type und name durchlaufe.

    Bist du mit dem Problem schon weitergekommen? Wenn ich mir mit console.log() - alert() ist kein gescheites Debugging-Werkzeug - das this innerhalb der Funktion select oder deselect anzeigen lasse, dann zeigt das auf den Controller-Scope. Wenn du das auslösende Element haben möchtest, musst du im ngClick-Handler $event übergeben und kannst es dann im Handler mit deinEventHandlerFunctionParameterName.target ansprechen. Das hat dann auch eine Eigenschaft type, wenn es ein input-Element ist.

    Wenn du nun Elemente eines bestimmten Typs in einem bestimmten Teilbereich des DOMs haben möchtest, dann musst du das DOM abklappern. Das geht mit purem Javascript oder so wie man es mit jQuery machen würde. AngularJS hat ja ein Mini-jQuery eingebaut oder du hast ein vollständiges eingebunden.

    Ich würde außerdem diese Logik aus dem Controller rausnehmen und eine Direktive erstellen. Es gibt da den ungeschriebenen Angular-Leitsatz: Alles was im DOM rumfummelt, gehört nicht in einen Controller sondern in eine Direktive. Du kannst das aber auch dort lassen, wenn dir Direktiven zu schwierig sind. Jedenfalls stelle ich mir die Anwendung so vor:

    <input type="radio" name="test1" hw-select="input[type=radio]" />
    

    hw-select ist der Direktivenname (im Code dann hwSelect) und input[type=radio] ist ein beliebiger Selektor-Ausdruck. Damit wird die Direktive universell und du kannst beliebige Ziele definieren. Im Controller der Direktive kannst du damit die Elemente ansprechen und wie gewünscht bearbeiten.

    dedlfix.