Becca: Update Eintrag in Datenbank

0 58

Update Eintrag in Datenbank

Becca
  • php
  1. 0
    Gunnar Bittersmann
    • formulare
    • html
    • php
    1. 0
      Becca
      1. 0
        Robert B.
        1. 0
          Becca
          1. 0
            Gunnar Bittersmann
            1. 0
              Becca
              1. 0
                Robert B.
                • menschelei
              2. 0
                Gunnar Bittersmann
                1. 0
                  Becca
          2. 0
            Robert B.
            • formulare
            • html
            • javascript
            1. 0
              Becca
              1. 0
                Robert B.
                1. 0
                  Becca
                  1. 0
                    Robert B.
                    1. 0
                      TS
          3. 0
            Christian Kruse
            1. 0
              Becca
              1. 0
                Robert B.
                1. 0
                  Becca
                  1. 0
                    Robert B.
                    • formulare
                    • html
                    • menschelei
                    1. 0
                      Becca
                      1. 0
                        Tabellenkalk
                        • menschelei
              2. 1
                TS
                • formulare
                • html
                • javascript
                1. 0
                  Becca
            2. 0
              Gunnar Bittersmann
              1. 0
                Becca
                1. 0
                  Gunnar Bittersmann
                  1. 0
                    Becca
            3. 0
              TS
              • formulare
              • html
              • javascript
              1. 0
                Becca
                • formulare
                • html
                • php
              2. 0
                Gunnar Bittersmann
      2. 0
        Gunnar Bittersmann
        1. 0
          Becca
          1. 0
            Robert B.
            • menschelei
            • zu diesem forum
            1. 0
              Becca
              1. 0
                Robert B.
                1. 0
                  Becca
                  1. 0
                    Robert B.
              2. 0
                Gunnar Bittersmann
                1. 0
                  Becca
                  1. 1
                    Robert B.
                    1. 0
                      chorn
              3. 0
                TS
                • ajax
                • formulare
                1. 0
                  Becca
                  1. 0
                    TS
                    1. 0
                      Becca
                      1. 0
                        Robert B.
          2. 0
            Gunnar Bittersmann
  2. 1
    Rolf b
    1. 2
      Orlok
      1. 0
        TS
        • javascript
        1. 1
          Gunnar Bittersmann
          1. 0
            TS
            1. 1
              dedlfix
    2. 0
      Gunnar Bittersmann
      • meinung
      1. 0
        TS
  3. 1
    pl

Hallo,

wie kann ich erreichen dass mein Formular

<form name="frm_sb" method="post">
  <label for="sb">Selbstabholung</label>
  <input name="sb" type="radio" value="1" <?php echo (htmlspecialchars($array['sb']) == '1'?'checked="checked"':NULL) ?> /> Ja
  <input name="sb" type="radio" value="0" <?php echo (htmlspecialchars($array['sb']) == '0'?'checked="checked"':NULL) ?> /> Nein
  <input type="hidden" name="id" value="<?php echo htmlspecialchars($array['id']); ?>">
</form>

wenn ich die Auswahl ändere? Bei einem select Feld mache ich dieses so

onchange="this.form.submit()
  1. @@Becca

    wie kann ich erreichen dass mein Formular … wenn ich die Auswahl ändere?

    Dass dein Formular was?

    Deine Formularfelder haben übrigens keine Beschriftung. for-Attribute beziehen sich auf IDs von Eingabefeldern; bei dir haben sie keine IDs.

    Radiobuttons sollte üblicherweise in fieldset gruppiert werden:

    <form name="frm_sb" method="post">
      <fieldset>
        <legend>Selbstabholung</lagend>  
        <input id="sb_ja" name="sb" type="radio" value="1" <?php echo ($array['sb'] == '1'?'checked="checked"':NULL) ?> />
        <label for="sb_ja">Ja</label>
        <input id="sb_nein" name="sb" type="radio" value="0" <?php echo ($array['sb'] == '0'?'checked="checked"':NULL) ?> />
        <label for="sb_nein">Nein</label>
      </fieldset>
      <input type="hidden" name="id" value="<?php echo htmlspecialchars($array['id']); ?>">
    </form>
    

    oder

    <form name="frm_sb" method="post">
      <fieldset>
        <legend>Selbstabholung</lagend>
        <label>
          <input id="sb_ja" name="sb" type="radio" value="1" <?php echo ($array['sb'] == '1'?'checked="checked"':NULL) ?> /> Ja
        </label>
        <label for="sb_nein">
          <input id="sb_nein" name="sb" type="radio" value="0" <?php echo ($array['sb'] == '0'?'checked="checked"':NULL) ?> /> Nein
        </label>
      </fieldset>
      <input type="hidden" name="id" value="<?php echo htmlspecialchars($array['id']); ?>">
    </form>
    

    In der zweiten Variante ginge es auch ohne IDs und for-Attribute – außer in kaputten Screenreadern.

    Da $array['sb'] nicht in den HTML-Code ausgegeben wird, ist es unsinnig, dass durch htmlspecialchars() zu jagen.

    Wo ist der Submit-Button? Wie schickt man das Formular ohne JavaScript ab?

    LLAP 🖖

    --
    “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
    1. Wo ist der Submit-Button? Wie schickt man das Formular ohne JavaScript ab?

      Kannst du lesen oder nur unützige Kritik abgeben?

      onchange="this.form.submit()
      

      Damit schicke ich ein select Feld ab. Müsste doch auch irgendwie bei den Radio-Buttons sein? Ein normaler Button kommt mir nicht auf die Seite, wird schon lange nicht mehr benötigt.

      1. Hallo Becca,

        was ist daran so schwierig, diese Anmerkung …

        Wo ist der Submit-Button? Wie schickt man das Formular ohne JavaScript ab?

        … und diese …

        Damit schicke ich ein select Feld ab. Müsste doch auch irgendwie bei den Radio-Buttons sein? Ein normaler Button kommt mir nicht auf die Seite, wird schon lange nicht mehr benötigt.

        … in Einklang zu bringen? Warum willst du zwingend Nutzer ohne JavaScript aussperren?

        Viele Grüße
        Robert

        1. Warum willst du zwingend Nutzer ohne JavaScript aussperren?

          Weil ein Button

          a) Nicht in mein Design passt b) Man in der heutigen Zeit überall JavaScript braucht, wer dieses nicht hat, steht vor geschlossenen Türen. Das ist meine Seite, das ist meine Entscheidung. Punkt!

          1. @@Becca

            Warum willst du zwingend Nutzer ohne JavaScript aussperren?

            Weil ein Button

            a) Nicht in mein Design passt

            Unsinnige Begründung.

            Design ist nicht, wie etwas aussieht, sondern wie etwas funktioniert.

            b) Man in der heutigen Zeit überall JavaScript braucht, wer dieses nicht hat, steht vor geschlossenen Türen.

            Es haben weitaus mehr Leute kein JavaScript als du dir vorstellen kannst.

            Das ist meine Seite, das ist meine Entscheidung. Punkt!

            Deine Entscheidung. Nicht die beste.

            LLAP 🖖

            --
            “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
            1. Design ist nicht, wie etwas aussieht, sondern wie etwas funktioniert.

              Kannst du einfach mal etwas hinnehmen ohne ständig deinen Senf abgeben zu müssen? Ich bin jetzt 20 Postings von dir durchgegangen immer hast du was zu meckern, zu verbessern. Du nimmst nie etwas hin.

              Und doch, Design steht auf MEINER WebSeite, die MIR gehört an oberster Stelle, ich mach die WebSeite für MICH, das ist MEIN Blog, das sind MEINE Inhalte. Wer sie lesen will muss sich anpassen, wer nicht kann weiter gehen. Ich verdiene damit kein Geld, ich mach das für mich und meine Freunde, wer die Seite zufällig besucht, muss damit leben! GANZ EINFACH!

              1. Ein Literaturtipp aus aktuellem Anlass: „Zen und die Kunst ein Motorrad zu warten“.

              2. @@Becca

                Design ist nicht, wie etwas aussieht, sondern wie etwas funktioniert.

                Kannst du einfach mal etwas hinnehmen ohne ständig deinen Senf abgeben zu müssen? Ich bin jetzt 20 Postings von dir durchgegangen immer hast du was zu meckern, zu verbessern. Du nimmst nie etwas hin.

                Und doch, Design steht auf MEINER WebSeite, die MIR gehört an oberster Stelle, ich mach die WebSeite für MICH, das ist MEIN Blog, das sind MEINE Inhalte. Wer sie lesen will muss sich anpassen, wer nicht kann weiter gehen. Ich verdiene damit kein Geld, ich mach das für mich und meine Freunde, wer die Seite zufällig besucht, muss damit leben! GANZ EINFACH!

                „Du hättest "Ich will keine Hilfe" auch wesentlich kürzer schreiben können.“ — Kai345

                LLAP 🖖

                --
                “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                1. Habe ich NIE gesagt. Schon wieder DEINE Meinung die nur zählt!

          2. Hallo Becca,

            Weil ein Button

            a) Nicht in mein Design passt

            Dann stimmt mit dem Design etwas nicht.

            b) Man in der heutigen Zeit überall JavaScript braucht, wer dieses nicht hat, steht vor geschlossenen Türen. Das ist meine Seite, das ist meine Entscheidung. Punkt!

            Kann man so sehen, es sind schließlich deine Nichtbesucher, wenn „die Seite nicht geht“. Aber du solltest vielleicht diese Arroganz gegenüber bestimmten Seitenbesuchern zu Gunsten von progressive enhancement überdenken. Du könntest z.B. den Button mit JavaScript ausblenden.

            Viele Grüße
            Robert

            1. Nein, keine zwei Optionen. Ich möchte kein Button, wie oft denn noch! Es ist MEINE Seite, es sind MEINE Besucher. Kapier es doch endlich oder diskutiere hier nicht mit. Schlimm!

              1. Liebe Becca,

                Nein, keine zwei Optionen. Ich möchte kein Button, wie oft denn noch!

                Hast du überhaupt verstanden, welchen Vorschlag ich dir mache? Frag bitte nach, wenn da etwas unklar ist.

                Es ist MEINE Seite, es sind MEINE Besucher. Kapier es doch endlich oder diskutiere hier nicht mit. Schlimm!

                Du suchst Hilfe und bekommst welche, aber anstatt diese anzunehmen oder wenigstens mal darüber nachzudenken lehnst du sie von vornherein ab. Schlimm!

                Viele Grüße
                Robert

                1. Hast du überhaupt verstanden, welchen Vorschlag ich dir mache? Frag bitte nach, wenn da etwas unklar ist.

                  So habe ich es verstanden:

                  Hat ein User JS drin wird der Button ausgeblendet, hat ein User kein JS wird der Button eingeblendet. richtig? Und genau darauf kann ich sehr gut verzichten.

                  1. Hi,

                    Hat ein User JS drin wird der Button ausgeblendet, hat ein User kein JS wird der Button eingeblendet. richtig?

                    Das ist vollkommen korrekt.

                    Und genau darauf kann ich sehr gut verzichten.

                    Angesichts des Kosten-Nutzen-Verhältnisses kann ich das nicht nachvollziehen.

                    Viele Grüße
                    Robert

                    1. Hello,

                      Hat ein User JS drin wird der Button ausgeblendet, hat ein User kein JS wird der Button eingeblendet. richtig?

                      Das ist vollkommen korrekt.

                      Fast!

                      Der Button BLEIBT eingeblendet.

                      Liebe Grüße
                      Tom S.

                      --
                      Es gibt nichts Gutes, außer man tut es
                      Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
          3. Hallo Becca,

            Warum willst du zwingend Nutzer ohne JavaScript aussperren?

            Weil ein Button

            a) Nicht in mein Design passt

            Du kannst das Aussehen des Buttons doch anpassen, wie du es für richtig hälst?

            LG,
            CK

            1. Du kannst das Aussehen des Buttons doch anpassen, wie du es für richtig hälst?

              Habe ich schon versucht, passt einfach nicht ins Design.

              Alternativ-Text

              Der User müsste hinter JEDEM Eintrag dann ein Button klicken, das meiner Meinung nach zu umständlich ist. Schöner ist doch er User klickt ein Button an der Eintrag bekommt im HINTERGRUND ein Update. So stelle ich mir eine optimale Nutzung vor.

              1. Ähm …

                Der User müsste hinter JEDEM Eintrag dann ein Button klicken, das meiner Meinung nach zu umständlich ist. Schöner ist doch er User klickt ein Button an der Eintrag bekommt im HINTERGRUND ein Update. So stelle ich mir eine optimale Nutzung vor.

                … was spricht dagegen, das Update im Hintergrund (XHR?) auszuführen und als Fallback einen Button am Ende des Formulars anzubieten, mit dem alle Änderungen submittet werden?

                Viele Grüße
                Robert

                1. NEIN! Es gibt kein Button! Schluss jetzt, oder sind wir hier im Kindergarten?

                  1. Es hieße „keinen“ Button.

                    Und wir sind anscheinend so lange im Kindergarten, wie du uns stichhaltige Gründe für ein 100% nutzbares Formular vorenthältst. Aus funktionaler Sicht spricht IMHO nichts gegen die hier gemachten Vorschläge und die ließen sich sogar im Layout so umsetzen, wie du das wünscht. Aber dafür müsstest du deine Abwehrhaltung ablegen und konstruktiv mit uns diskutieren.

                    1. NEIN!Ich bleibe bei meiner Meinung ich bin alt genug.

                      1. Hallo,

                        ich bin alt genug.

                        Können wir da bitte mal dein Kindergartendiplom sehen? ;)

                        scnr

                        Gruß
                        Kalk

              2. Hello,

                Alternativ-Text

                Und wenn man nun noch auf den ersten Blick zweifelsfrei erkennen könnte, zu welchem Radio das 'Ja' gehört, dann wäre man schon einen Schritt weiter.

                Und wenn Du dann anstelle der Radio-Buttons richtige Submit-Buttons verwenden würdest, könnte ich deiner Logik sogar folgen. Die gesamte Seite wird bei jeder Änderung (Klick auf einen Button) gepostet und neu aufgebaut. Dafür würde man dann auch kein JavaScript benötigen.

                Liebe Grüße
                Tom S.

                --
                Es gibt nichts Gutes, außer man tut es
                Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
                1. Du bringst mich auf die Idee. Ich setzte das ganze mit einem kleinen select Feld um. Damit sollte mein Problem gelöst sein und ich hätte die Buttons weg.

            2. @@Christian Kruse

              Du kannst das Aussehen des Buttons doch anpassen, wie du es für richtig hälst?

              Nein. Das wären ja 3 Zeilen CSS mehr, was die Ladezeit in exorbitante Höhen treibt. LOL.

              LLAP 🖖

              --
              “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
              1. Rede doch nicht so ein Bullshit, sorry aber du bringst mich auf 180! Die Bemerkung von mir bezog sich auf das Formular, reiß nicht alles aus dem Zusammenhang. Mit deinem fieldset und Co habe ich viel mehr Zeilen Code und Arbeit.

                1. @@Becca

                  Rede doch nicht so ein Bullshit, sorry aber du bringst mich auf 180!

                  Du hast Glück, dass ich so ein Gemütsmensch bin. Sonst hätte ich schon ein Schloss vor diesen Thread gemacht.

                  Die Bemerkung von mir bezog sich auf das Formular, reiß nicht alles aus dem Zusammenhang. Mit deinem fieldset und Co habe ich viel mehr Zeilen Code und Arbeit.

                  Code zum Stylen von button = gut, Code zum Stylen von fieldset = schlecht, verstehe.

                  Kleiner Hinweis: Die sinnvolle Verwendung von HTML-Elementen richtet sich nicht danach, wieveiel Arbeit ein Entwickler mit dem Stylen hat.

                  LLAP 🖖

                  --
                  “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                  1. Du hast Glück, dass ich so ein Gemütsmensch bin. Sonst hätte ich schon ein Schloss vor diesen Thread gemacht.

                    Kann es nicht sein dass du Angst hast dass dir mal jemand die Meinung geigt. Schließen zeigt nur dass du selber nur deine Meinung erlaubst keine andere.

                    Hast du gelesen für wen die Seite ist? Nein hast du bestimmt nicht. Hast du gelesen dass es meine Seite ist. Ich darf auf meiner Seite machen was ICH will.

            3. Hello,

              Du kannst das Aussehen des Buttons doch anpassen, wie du es für richtig hälst?

              Und ihn für alle Nutzer mit JavaScript sogar ausblenden.

              Schade, dass Gunnar das nicht einfach mal zeigt, wie das ordnungsgemäß ginge.

              ICH will mich mit ihm jetzt aber nicht anlegen, dass ich Label falsch anwende oder Fieldset nicht benutze oder was man sonst immer noch finden kann. Ich laude sonst Gefahr, wieder meine unerwünchte Meinung bzw. Vergleiche zu äußern ...

              Liebe Grüße
              Tom S.

              --
              Es gibt nichts Gutes, außer man tut es
              Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
              1. Traurig dass du Angst hast deine Meinung zu sagen. Jeder hat doch das Recht seine Meinung zu äußern.

              2. @@TS

                Schade, dass Gunnar das nicht einfach mal zeigt, wie das ordnungsgemäß ginge.

                Ich fände es schade, hier die sprichwörtlichen Perlen vor die sprichwörtlichen Säue zu werfen.

                LLAP 🖖

                --
                “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
      2. @@Becca

        Kannst du lesen oder nur unützige Kritik abgeben?

        Dass ich dir das Markup für dein Formular so gemacht habe, dass es funktioniert, ist für dich „unützige Kritik“?

        LLAP 🖖

        --
        “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
        1. Ja, da meines auch wunderbar in allen relevanten Browsern getan hat.

          Ach noch etwas vergessen. Mit deinem Code benötige ich viel mehr CSS Code um das Formular zu stylen. Mehr Code = größere Datei = langsamere Ladegeschwindigkeit.

          Mit mir brauchst du darüber gar nicht diskutieren, ich bleibe bei meinem Formular ob es dir passt oder nicht.

          1. Hallo Becca,

            Mit mir brauchst du darüber gar nicht diskutieren, ich bleibe bei meinem Formular ob es dir passt oder nicht.

            Warum bist du dann überhaupt hier?

            Viele Grüße
            Robert

            1. Warum bist du dann überhaupt hier?

              Ich wollte keine Meinung zu meinem Formular sondern lediglich eine Hilfe wie ich es abschicken kann. Mehr nicht.

              1. Hallo Becca,

                Ich wollte keine Meinung zu meinem Formular sondern lediglich eine Hilfe wie ich es abschicken kann. Mehr nicht.

                Und genau diese Hilfe haben wir dir hier gegeben.

                Viele Grüße
                Robert

                1. Ja, mit einem Button was für MICH nicht in Frage kommt. Also 0 Hilfe! Nur dummes geredet was meine Zeit kostet und meine Nerven belastet.

                  1. Dann lies mal genau meinen Kommentar anstatt ausfallend zu werden.

              2. @@Becca

                Warum bist du dann überhaupt hier?

                Ich wollte keine Meinung zu meinem Formular sondern lediglich eine Hilfe wie ich es abschicken kann. Mehr nicht.

                „Uns gibt es nur mit Meinung und ungebetener Beratung.“
                Chräcker Heller, 2006

                Daran hat sich bis heute nichts geändert. Und wird sich wohl auch in Zukunft nicht.

                LLAP 🖖

                --
                “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                1. Na gut ist mir egal, dann gehe ich in ein anders Forum. Ihr stellt euch selber schlecht da, da ich natürlich im anderen Forum berichten werde wie es hier zugeht und dass man hier keine Hilfe bekommt. Nur Ratschläge die keiner braucht und möchte!

                  1. Reisende soll man nicht aufhalten …

                    1. vorallem nicht wenn man sie dann in einem anderen Forum wiedertrifft und die Diskussion weitergeht :D

              3. Hello,

                Warum bist du dann überhaupt hier?

                Ich wollte keine Meinung zu meinem Formular sondern lediglich eine Hilfe wie ich es abschicken kann. Mehr nicht.

                Na, jetzt kommen wir der Sache doch langsam näher. WEnn ich das mal aus dem Gedächtnis und meinem Verständnis für dein Anliegen zusammenfassen darf?

                • Du hast eine ganze Liste von Alterenativfragen (Radios: Ja / Nein oder ähnlich)?
                • Du möchtest, dass jede Änderung in der Liste (im Formular) sofort im Hintergrund an den Server gesendet wird?
                • Du möchtest das nicht mit einem expliziten Submit-Button tun, sondern immer sofort dann, wenn die Änderung stattgefunden hat?
                • Du möchtest aber (vermutlich) auch nicht, dass deien Seite nach jeder Änderung neu aufgebaut wird? Es soll also nur die einzelne Änderung und nicht die gesamte Liste (Formular) zum Server geschickt werden?

                Dann hilft Dir ein Asynchronous JavaScript & XML Request (AJAX-Request, XHR).

                Wenn Du das haben möchtest, dann klicke jetzt bitte auf JA
                (Ich hoffe, dass Du JavaScript eingeschaltet hast ;-P )

                @ALL: Ob man dann noch einen Fallback einbaut, lasst uns bitte mal zurückstellen

                Liebe Grüße
                Tom S.

                --
                Es gibt nichts Gutes, außer man tut es
                Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
                1. JA JA JA JA JA JA - Ich muss leider mindestens 10 Zeichen verwenden!

                  1. Hello,

                    JA

                    Dann fang mal bei dieser Seite an: JavaScript/XMLHttpRequest und in der Wikipedia unter Ajax (Programmierung)

                    Außerdem werden wir dann noch das Thema "event bubbling and capturing" anschauen müssen.

                    Liebe Grüße
                    Tom S.

                    --
                    Es gibt nichts Gutes, außer man tut es
                    Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
                    1. Leider verstehst du auch nicht um was es geht, schade! Das Thema hat sich für mich eh erledigt.

                      1. Du bejahst alle Fragen von Tom und dann das?

                        An welcher Stelle hapert es denn? Oder hapert es gar nicht mehr, weil du dich konzeptionell umentschieden hast?

          2. @@Becca

            Ja, da meines auch wunderbar in allen relevanten Browsern getan hat.

            Deines hat nicht funktioniert. Nicht in Screenreadern – und die sind auch relevant.

            Ach noch etwas vergessen. Mit deinem Code benötige ich viel mehr CSS Code um das Formular zu stylen. Mehr Code = größere Datei = langsamere Ladegeschwindigkeit.

            Hundert Bytes CSS sparen zu wollen ist wohl sinnlose Mikrooptimierung.

            Mit mir brauchst du darüber gar nicht diskutieren, ich bleibe bei meinem Formular ob es dir passt oder nicht.

            Ob es mir passt, ist irrelevant. Die Frage ist: Passt es den Nutzern (und zwar allen Nutzern) deiner Seite?

            LLAP 🖖

            --
            “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
  2. Ist euch eigentlich aufgefallen, dass bei aller Bedienbarkeit keiner darauf hingewiesen hat, wie man die Änderung des Radiobuttons per Script erkennt? Offenbar war Becca ja mit onchange nicht zufrieden.

    Um den Hagel an Verbesserungsvorschlägen noch um das Thema Unaufdringlichkeit zu verlängern, und um Beccas ursprüngliche Frage nebenbei zu beantworten:

    Das change Event wird auch bei einem Radio-Button gefeuert, der in den CHECKED-Status wechselt. Insofern war eigentlich die Frage unnötig, der erforderliche Mechanismus war bekannt. Wenn es bei Dir so nicht funktioniert hat, hast Du möglicherweise irgendwas nicht ganz richtig gemacht.

    In diesem Beispiel (welches in keinster Weise den Anforderungen an Bedienbarkeit etc genügt, dazu steht oben genug an Mustercode) gibt es in meinem Fiddle einen Alert bei jeder Änderung. Statt des Alerts könnte man ein Form submitten. Statt dessen könnte man auch einen Ajax-Request senden, der die Änderung beim Server meldet und die nötigen Updates für den Client abholt.

    <fieldset id="selbstabholung">
    <label><input name="a" type="radio" value="Ja" />Ja</label>
    <label><input name="a" type="radio" value="Nein" />Nein</label>
    </fieldset>
    

    Script-Fragment:

    registerRadioListener("selbstabholung", radioChanged);
    
    function registerRadioListener(id, func) {
       var set = document.getElementById(id);
       if (set !== null)
          set.querySelectorAll("input").forEach(function(r) {
             r.addEventListener("change", func);
          });
    }
    
    function radioChanged(evt) {
       var rb = evt.target;
       alert(rb.name+"="+rb.value);
    }
    

    Rolf

    1. Hallo Rolf

      <fieldset id="selbstabholung">
        <label><input name="a" type="radio" value="Ja" />Ja</label>
        <label><input name="a" type="radio" value="Nein" />Nein</label>
      </fieldset>
      

      Script-Fragment:

      registerRadioListener("selbstabholung", radioChanged);
      
      function registerRadioListener(id, func) {
         var set = document.getElementById(id);
         if (set !== null)
            set.querySelectorAll("input").forEach(function(r) {
               r.addEventListener("change", func);
            });
      }
      
      function radioChanged(evt) {
         var rb = evt.target;
         alert(rb.name+"="+rb.value);
      }
      

      Es sollte nicht unerwähnt bleiben, dass die Methode forEach für NodeLists gegenwärtig noch nicht von allen relevanten Browsern unterstützt wird. Das gleiche gilt für die Implementierung des Iterationsprotokolls und die Methoden entries, keys und values.

      Man könnte natürlich ein Polyfill einfügen oder anders über die Liste iterieren, aber ich denke nicht, dass das im vorliegenden Fall sinnvoll wäre. Eigentlich gibt es hier nämlich keinen Grund, überhaupt mehrere Eventhandler zu registrieren, und entsprechend auch keinen Grund, über die Radiobuttons zu iterieren.

      document.getElementById('selbstabholung').addEventListener('change', function (event) {
        alert(event.target.name + ' = ' + event.target.value);
      });
      

      Statt also für jeden einzelnen Radiobutton einen Eventhandler zu registrieren, könnte change an ein gemeinsames Elternelement delegiert werden. Zum Beispiel an das fieldset-Element. Das Element bei dem das Ereignis eingetreten ist wird — wie in deiner Rückruffunktion auch — über die Eigenschaft event.target referenziert.

      Wenn für mehrere Elemente der gleiche oder der selbe Eventhandler registriert wird, dann ist das meist ein sicheres Zeichen dafür, dass man besser Event Delegation nutzen sollte.

      Darüber hinaus wäre zu überlegen, ob die bedingte Anweisung in deinem Beispiel wirklich sinnvoll ist. Abgesehen davon, dass die explizite Prüfung auf ungleich null unnötig ist und man außer bei Einzeilern lieber Klammern setzen sollte, wäre es vielleicht besser die Registrierung des Eventhandlers nicht auf diese Weise abzusichern.

      Wenn man sich verschrieben hat oder irgendwas am relevanten Markup ändert, dann kommt andernfalls direkt ein Typfehler und das Problem kann leicht behoben werden. Wird der Fall jedoch wie in deinem Beispiel abgefangen, dann wird einfach kein Handler registriert, und es ist nicht so offensichtlich woran es liegen könnte, dass am Ende nicht das gewünschte Ergebnis herauskommt.

      Was hier die beste Vorgehensweise ist, lässt sich aber wohl nicht so ohne weiteres beantworten, weshalb ich das nicht als Kritik, sondern nur als Anmerkung verstanden wissen möchte.

      Vor dem Hintergrund, dass Becca ihre Eventhandler bislang offenbar über HTML-Attribute registriert hat, erscheint es mir noch erwähnenswert, dass es bei der von dir dankenswerterweise eingebrachten Methode addEventListener darauf ankommt, wann das Script ausgeführt wird.

      Der von dir verlinkte Abschnitt im Wiki geht auf diese Problematik nicht ein und hierbei handelt es sich um eine beliebte Fehlerquelle. Es ist also zu beachten, dass der Code mit dem Elemente referenziert werden erst dann ausgeführt wird, wenn das Markup fertig geparst wurde.

      Zu diesem Zweck kann der entsprechende Code beispielsweise in einen Eventhandler für das Ereignis DOMContentLoaded gepackt werden, den man für das Objekt window registriert. Oder man notiert das Script einfach am Ende vom body. Auf diese Weise ist sichergestellt, dass zum Zeitpunkt der Ausführung alle Elemente in ihre Objektrepräsentation überführt wurden.

      Viele Grüße,

      Orlok

      1. Hello,

        vielen Dank für die ausführliche Darstellung.

        Wie weit kann ich die Event Delegation treiben und trotzdem noch den Auslöser sauber erkennen? Angenommen der Fall, wir haben wir es mit einer Liste von Radio-Groups zu tun, die jeweils z. B. 5 Auswahl-Alternativen bieten (sehr gut - gut - unentschieden -schlecht - ganz schlecht):
        Wie müsste man nun z. B. im umschließenden Form-Element die Events abfangen?

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es
        Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
        1. @@TS

          Wie weit kann ich die Event Delegation treiben und trotzdem noch den Auslöser sauber erkennen?

          Wie immer: mit Event.target

          Angenommen der Fall, wir haben wir es mit einer Liste von Radio-Groups zu tun, die jeweils z. B. 5 Auswahl-Alternativen bieten (sehr gut - gut - unentschieden -schlecht - ganz schlecht):
          Wie müsste man nun z. B. im umschließenden Form-Element die Events abfangen?

          Wenn ein Radiobutton der Auslöser war, bekommst du mit Event.target.name die Gruppe dieses Radio-Buttons; mit Event.target.value dessen Wert.

          In diesem Beispiel, wo auf change reagiert wird, was nur von den Radiobutton ausgelöst worden sein kann, mag das ohne weitere Abfrage genügen. Ansonsten in if (Event.target.nodeName === "INPUT") kapseln.

          LLAP 🖖

          --
          “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
          1. Hello @Gunnar,

            Wie weit kann ich die Event Delegation treiben und trotzdem noch den Auslöser sauber erkennen?

            Wie immer: mit Event.target

            Angenommen der Fall, wir haben wir es mit einer Liste von Radio-Groups zu tun, die jeweils z. B. 5 Auswahl-Alternativen bieten (sehr gut - gut - unentschieden -schlecht - ganz schlecht):
            Wie müsste man nun z. B. im umschließenden Form-Element die Events abfangen?

            Wenn ein Radiobutton der Auslöser war, bekommst du mit Event.target.name die Gruppe dieses Radio-Buttons; mit Event.target.value dessen Wert.

            In diesem Beispiel, wo auf change reagiert wird, was nur von den Radiobutton ausgelöst worden sein kann, mag das ohne weitere Abfrage genügen. Ansonsten in if (Event.target.nodeName === "INPUT") kapseln.

            Schonmal vielen Dank.

            Verstehe ich das richtig so, dass der Event schlussendlich sowieso immer im Window-Objekt landet? (Ist das so richtig benannt?).

            Was spräche also dagegen, die Eventlistener gleich dort zu montieren? Dauert das sooo viel länger, bis der Event z. B. vom Form-Element bis zur Wurzel durchgereicht wurde? Oder könnte er unterwegs verloren gehen?

            Wenn ohnehin alle relevanten Elemente des Dokumentes eine ID bekommen, könnte man dort doch zentral auswerten, oder?

            Liebe Grüße
            Tom S.

            --
            Es gibt nichts Gutes, außer man tut es
            Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
            1. Tach!

              Verstehe ich das richtig so, dass der Event schlussendlich sowieso immer im Window-Objekt landet? (Ist das so richtig benannt?).

              Was spräche also dagegen, die Eventlistener gleich dort zu montieren?

              Organisation. Man will keinen Gott-Eventhandler, der allen Mist einsammelt, und dann zentral alle individuellen Anforderungen verarbeiten muss. Sondern man möchte nur die Events individuell behandeln, die am übergeordneten Element ankommen.

              Wenn ohnehin alle relevanten Elemente des Dokumentes eine ID bekommen, könnte man dort doch zentral auswerten, oder?

              Könnte man, will man aber nicht. Besonders nicht, wenn das Projekt größer als eine Handvoll Zeilen ist.

              dedlfix.

    2. @@Rolf b

      Ist euch eigentlich aufgefallen, dass bei aller Bedienbarkeit keiner darauf hingewiesen hat, wie man die Änderung des Radiobuttons per Script erkennt?

      Nein. Nach der Reaktion von Becca hat wohl niemand Lust verspürt, sich des JavaScripts anzunehmen. Wer hier rumpöbelt, soll nicht auch noch belohnt werden.

      Ansonsten wäre es mir ein Leichtes gewesen, auf mein Posting zu verweisen, aus dem @Orlok meine Gedanken abgeschrieben hat. 😆

      LLAP 🖖

      --
      “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
      1. Hello,

        das wäre sehr lobenswert gewesen. ;-)

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es
        Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
  3. Ok, jetzt ich:

    Und ich denke, jeder Benutzer sollte die Chance haben, ein Formular in aller Ruhe beklicken zu dürfen ohne dass bei jedem Klick Daten irgenwohin gespeichert werden. Das heißt, dass es einen dedizierten Button schon geben sollte für diejenigen, die nach einigem Klick und Klack den Beschluss gefasst haben, dass genug geklickt wurde und es an der Zeit ist, das Zusammengeklickte zu kommitten..

    Dafür wird wohl jeder Klickser dankbar sein und auch die Tastaturfetischisten sollten ihren Spaß daran haben ohne jeden Tustendrack bereuen zu müssen.

    Mit freundlichen Grüßen. Nur noch einen Klick...