Lukas.: Eventhandler nach Klick löschen

Hallo Forum,

ich habe seinerzeit mal eine Funktion (damals noch in nativem JS) erstellt, die ich über

onClick='addiere(Position,Betrag)' 

für die jeweilige Zeile aufrufe.

Innerhalb der Funktion addiere ich dann die Beträge und stelle sie dar, usw.

Der Wert für "Postion" ist übrigens eindeutig/unique.

Nun würde ich gerne umsetzen, dass jede zeile nach dem anklicken nicht noch einmal angeklickt werden kann und stehe etwas auf dem Schlauch. Ich glaube, in JQuery würde ichs vielleicht hin bekommen, aber in nativem JS fehlt mir ein wenig der Ansatz.

Wer kann mir bitte mal auf die Sprünge helfen?

L.

P.S: Nicht ärgern, wenn ich nicht sofort antworten kann, ich muß gleich erstmal noch mit "Hundi a Rundi" ;)

  1. Hello,

    setze den Eventlistener mit der passenden JavaScript-Methode, dann kannst Du ihn mit removeeventlistener() auch wieder entfernen.

    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. Hello,

      setze den Eventlistener mit der passenden JavaScript-Methode, dann kannst Du ihn mit removeeventlistener() auch wieder entfernen.

      Hi Tom,

      'halte ich schonmal für eine klasse Idee! Wie macht man das? Über onload und dann für alle Zeilen oder wie?

      L. (jetzt erstmal afk)

      1. Hello,

        setze den Eventlistener mit der passenden JavaScript-Methode, dann kannst Du ihn mit removeeventlistener() auch wieder entfernen.

        Hi Tom,

        'halte ich schonmal für eine klasse Idee! Wie macht man das? Über onload und dann für alle Zeilen oder wie?

        Ich würde das ganz anders versuchen.
        Du wirst vermutlich nur einen einzigen Eventlistener benötigen. Der behandelt alle Zeilen. Ist doch vermutlich immer dasselbe, was da gemacht werden soll?

        Und in den Zeilen könntest Du z.B. dann z.B. ein Data-Attribut ablegen, in dem steht, ob die Zeile schon bearbeitet wurde, oder nicht.

        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.
      2. Lieber Lukas.,

        Wie macht man das? Über onload und dann für alle Zeilen oder wie?

        das "onload" möchtest Du nicht im HTML-Code notieren. Du notierst es in Deinem JavaScript-Code, und zwar mit dem schon beschriebenen addEventListener und dem DOMContentLoaded-Ereignis.

        Liebe Grüße,

        Felix Riesterer.

    2. Hi there,

      setze den Eventlistener mit der passenden JavaScript-Methode, dann kannst Du ihn mit removeeventlistener() auch wieder entfernen.

      Das ist gar nicht notwendig, wenn er einfach removeAttribute verwendet, braucht er keinen Eventlistener setzen…

      1. Hallo Klawischnigg,

        Das ist gar nicht notwendig, wenn er einfach removeAttribute verwendet, braucht er keinen Eventlistener setzen…

        Ich glaube, es herrscht hier Konsens, nicht onclick zu verwenden.

        Bis demnächst
        Matthias

        --
        Rosen sind rot.
        1. Hi there,

          Das ist gar nicht notwendig, wenn er einfach removeAttribute verwendet, braucht er keinen Eventlistener setzen…

          Ich glaube, es herrscht hier Konsens, nicht onclick zu verwenden.

          Offenbar hat sich dieser Konsens bis zum OP noch nicht herumgesprochen. Wie immer denke ich, er will einfach ein Problem gelöst haben. Beim Programmieren gibts keine Haltungsnoten…

          1. Hallo Klawischnigg,

            Beim Programmieren gibts keine Haltungsnoten…

            Ich denke schon.

            Bis demnächst
            Matthias

            --
            Rosen sind rot.
            1. Hi there,

              Beim Programmieren gibts keine Haltungsnoten…

              Ich denke schon.

              ich nehm' einmal an, Du lebst nicht davon, oder?

              1. Hallo Klawischnigg,

                ich nehm' einmal an, Du lebst nicht davon, oder?

                Richtig.

                Bis demnächst
                Matthias

                --
                Rosen sind rot.
              2. Hallo,

                ich nehm' einmal an, Du lebst nicht davon, oder?

                Vielleicht lebt er davon, die Haltungsnoten zu verteilen?

                Gruß
                Kalk

                1. Hi there,

                  ich nehm' einmal an, Du lebst nicht davon, oder?

                  Vielleicht lebt er davon, die Haltungsnoten zu verteilen?

                  Das kann nicht sein. Verhungerte Menschen schreiben keine Postings…

                  1. Es sei denn, die Empfänger der Haltungsnoten sind verpflichtet, sie sich erteilen zu lassen...

                    Rolf

          2. Hallo Klawischnigg,

            Beim Programmieren gibts keine Haltungsnoten…

            Programmieren ist kein Kunstturnen, sondern ein Handwerk. Und die Verwendung von Event-Handlern im HTML-Source ist Pfusch (Stichwort separation of concerns).

            LG,
            CK

            1. Hi there,

              Programmieren ist kein Kunstturnen, sondern ein Handwerk. Und die Verwendung von Event-Handlern im HTML-Source ist Pfusch (Stichwort separation of concerns).

              Das mag ja sein, Tatsache ist, wir haben alle keine Ahnung, wofür der OP das braucht, in welchem Rahmen er das verwendet oder wie aufwendig sein "Projekt" ist. Und bei irgendwelchen Q&D-Geschichten kann man Event-Handler in der Source durchaus verwenden, vor allem, und das ist in dem Fall das Entscheidende: offenbar waren die Handler im Source ja schon drinnen. Ich glaub nicht, daß er das wegen Eurer "concerns" umbauen will, aber wie gesagt, wir wissen ja nichts über seine Geschichten…

              1. ich nehm' einmal an, Du lebst nicht davon, oder?

                ICH lebe davon. Und ich habe schon oft Code von Kollegen gesehen, die auf Haltungsnoten beim Programmieren keinen Wert legten. "Tut doch, und ich hab eh keine Zeit" - damit wurde der Cot verteidigt.

                Aber wehe, es stand eine Weiterentwicklung an. Durch einen anderen Kollegen. Dann gab's Fluchen und Tastenklappern.

                Programmieren kann Kunst sein. Softwareentwicklung nicht. SE ist teils Handwerk, teils Ingenieurstätigkeit - man plant seine Vorgehensweise, verwendet erprobte Praktiken und gelangt - zumeist im Team - zu einer Lösung, die dokumentiert und wartbar ist. Das ist teurer, zahlt sich am Ende aber aus.

                Die Projekte, bei denen man Q&D was bereitstellen will, sind nachher die, die länger leben als erwartet und einem unter den Fingern zerbröseln wenn man sie wieder anfasst. Wie hier, der OP hat das vor längerer Zeit gebaut und will es jetzt nochmal anpassen. Man kann eine Lösung anbieten, die auf onclick aufbaut. Oder man investiert etwas mehr und gelangt zu einer Konstruktion, die aktuellen best-practices entspricht.

                Rolf

                1. Hi there,

                  Die Projekte, bei denen man Q&D was bereitstellen will, sind nachher die, die länger leben als erwartet und einem unter den Fingern zerbröseln wenn man sie wieder anfasst. Wie hier, der OP hat das vor längerer Zeit gebaut und will es jetzt nochmal anpassen. Man kann eine Lösung anbieten, die auf onclick aufbaut.

                  was ich getan habe

                  Oder man investiert etwas mehr und gelangt zu einer Konstruktion, die aktuellen best-practices entspricht.

                  ja eh. Das entscheidende ist nur, ob diese Investition sinnvoll ist oder nicht, das wissen wir noch immer nicht und können wir auch nicht beurteilen, solange wir das Projekt des OP nicht kennen. Ich entwickle seit über 35 Jahren Software, und die einzige Konstante in dieser doch einigermaßen langen Zeit war im Grunde immer nur die Frage, welcher Aufwand sich wofür rechnet (und auch bezahlt wird, was aber beim OP eingeräumterweise vermutlich keine Rolle spielen dürfte, sonst würde er eine solche Frage erst gar nicht stellen)…

              2. Hi there,

                Programmieren ist kein Kunstturnen, sondern ein Handwerk. Und die Verwendung von Event-Handlern im HTML-Source ist Pfusch (Stichwort separation of concerns).

                Das mag ja sein, Tatsache ist, wir haben alle keine Ahnung, wofür der OP das braucht, in welchem Rahmen er das verwendet oder wie aufwendig sein "Projekt" ist. Und bei irgendwelchen Q&D-Geschichten kann man Event-Handler in der Source durchaus verwenden, vor allem, und das ist in dem Fall das Entscheidende: offenbar waren die Handler im Source ja schon drinnen. Ich glaub nicht, daß er das wegen Eurer "concerns" umbauen will, aber wie gesagt, wir wissen ja nichts über seine Geschichten…

                Besser kann mans nicht zusammenfassen. Nachdem ich mit der Lösung "add Eventlistener" im Nachbau, aber nicht im Produktivscript zurecht kam, habe ich Deine Lösung verwendet und sie funktioniert für mich wunderbar. Q+D war in diesem Fall sicherlich genau der richtige Ansatz. Dennoch gut und richtig für imch zu wissen, wie man da eigentlich ran geht, so kann icg das bei neuen Projektschritten schon berücksichtigen.

                Danke an alle, L.

                1. @@Lukas.

                  Q+D war in diesem Fall sicherlich genau der richtige Ansatz.

                  Q+D ist vor allem eins: dirty. Und wie hier im Thread schon gesagt, kann sich das über kurz oder lang als alles andere als quick herausstellen.

                  Dennoch gut und richtig für imch zu wissen, wie man da eigentlich ran geht, so kann icg das bei neuen Projektschritten schon berücksichtigen.

                  Du hast die Chance vertan zu lernen, wie man’s richtig macht. Wo du nicht zurechtkamst, hätte man dir hier helfen können. So kommst du das nächste Mal, wenn du es richtig machen willst, womöglich wieder an derselben Stelle nicht weiter.

                  LLAP 🖖

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

                    Du hast die Chance vertan zu lernen, wie man’s richtig macht.

                    Muß (und kann) ich mit leben. 'Hab' noch andere Dinge zu tun, die eine höhere Priorität haben und/oder bezahlt werden. Hier gings nur um ein persönliches Schmankerl für mich selber. In Summe gesehen muß man sich im Leben immer wieder auch GEGEN Dinge entscheiden können, denn jede Entscheidung gegen etwas ist auch eine Entscheidung FÜR etwas anderes (genau wie umgekehrt: Jede Entscheidung für etwas ist auch immer eine Entscheidung gegen einige bis viel andere Dinge). Ich halte es für eine Stärke, Prioritäten zu setzen und unterm Strich dabei in Summe gesehen das beste Gesamtresultat zu erzielen. Dabei muß man (leider und zum Glück) auch mal eine Chance auslassen, kann aber (im selben oder anderen Lebensbereichen) zeitgleich eine, mehrere oder viele Chancen beim Schopf packen.

                    Gruß, L.

                  2. Naja, er hat die Chance ausgelassen, seine Seite zu renovieren, weil er die Brösel nicht mehr sortiert bekam und ihm der Aufwand, aus den Semmelbröseln die Semmel zu rekonstruieren, zu hoch wurde. Soll bei Legacy-Lösungen gerne mal vorkommen.

                    Aber er schrieb auch, dass er für die Zukunft was mitgenommen hat. Und damit könnten wir es doch gut sein lassen.

                    Rolf

                    1. Hallo,

                      Und damit könnten wir es doch gut sein lassen.

                      „Gut sein lassen“? Nein, nein, man muss gegen die Windmühlflügel ankämpfen bis zur GAU[1]

                      Gruß
                      Kalk


                      1. größten anzunehmenden Usability ↩︎

                      1. Hallo Tabellenkalk,

                        wo beeinträchtigt das Setzen der Eventhandler über das Markup die Usability (dass man es vermeiden sollte, ist mir klar...)? Falls ich wirklich alle Nachteile gelistet habe, erkenne ich nicht, wo die Usability eingeschränkt wird.

                        Gruß
                        Julius

                    2. Naja, er hat die Chance ausgelassen, seine Seite zu renovieren, weil er die Brösel nicht mehr sortiert bekam und ihm der Aufwand, aus den Semmelbröseln die Semmel zu rekonstruieren, zu hoch wurde. Soll bei Legacy-Lösungen gerne mal vorkommen.

                      Unverschämt?

                      Aber er schrieb auch, dass er für die Zukunft was mitgenommen hat. Und damit könnten wir es doch gut sein lassen.

                      Borniert?

                      Was solls?

                      L.

                      1. Unverschämt?

                        Borniert?

                        Die Antwort auf beide Fragen ist: Nein.

                        Was solls?

                        Was das alles hier soll, habe ich mich auch schon gefragt.

                        Ich werde mir Zukunft gut überlegen, ob ich nochmal Zeit investiere in den Versuch dir zu helfen, solltest du nochmal nach etwas fragen, bei dem ich dir vielleicht helfen könnte.

                        1. Unverschämt?

                          Borniert?

                          Die Antwort auf beide Fragen ist: Nein.

                          Das ist Deine Meinung. Ich darf eine andere haben. RolfB kennt weder mich noch meine Seite (wenns denn eine wäre), insofern empfinde ich sein Post durchaus als unverschämt, gönnerhaft, anmaßend. Es geht hier um nichtmal ein Tausendstel meines Gesamtsystems und ich habe durchaus begründet, warum ich das nun so gemacht habe. Ich kann mich nicht teilen und habe genügend andere Dinge in meinem Leben zu tun.

                          Ich werde mir Zukunft gut überlegen, ob ich nochmal Zeit investiere in den Versuch dir zu helfen, solltest du nochmal nach etwas fragen, bei dem ich dir vielleicht helfen könnte.

                          Das ist Dein gutes Recht. So wie es mein gutes Recht ist, mir aus 3,4 oder 5 Tips den für mich passenden herauszusuchen ohne mich danach hierfür rechtfertigen zu müssen und/oder (IMHO) unhöflich anposten zu lassen. Ich selber versuche, höflich zu sein und erwarte das mit ggü. ebenfalls. Wer das nicht leisten mag, soll mir eben nicht mehr helfen. Hilfe ist kein Persilschein für Mutmaßungen und/oder Unhöflichkeiten.

                          L.

                          Edit: @Rolf b: Sollte ich Dich mißverstanden haben, bitte ich einfach kurz um Info.

                          1. Ich habe Gunnars Absolutheitsanspruch widersprochen und angeregt, das Nachkarten sein zu lassen. Letztlich also deine Vorgehensweise verteidigt. Warum soll das unverschämt und borniert sein?

                            Ja, ich denke, du hast zu schnell gelesen und die Lektüre ins falsche Auge bekommen. Das Ergebnis war dann ein verbaler Schluckauf 😉

                            Rolf

                            1. Ich habe Gunnars Absolutheitsanspruch widersprochen und angeregt, das Nachkarten sein zu lassen. Letztlich also deine Vorgehensweise verteidigt. Warum soll das unverschämt und borniert sein?

                              Ja, ich denke, du hast zu schnell gelesen und die Lektüre ins falsche Auge bekommen. Das Ergebnis war dann ein verbaler Schluckauf 😉

                              Ja, ich glaube inzwischen auch, ich war zu schnell und voreilig. Ich ziehe meine Aussage zu Deinem Post zurück und behaupte fortan das Gegenteil... 😉 Sorry @Rolf, natürlich war das dann alles andere als unverschämt und borniert, sondern verständnisvoll und nett. Ich habs irgendwie völlig in den falschen Hals gekriegt und hatte wohl zudem heute noch "das dünne Hemdchen an" 😉

                              L.

                            2. @@Rolf b

                              Ich habe Gunnars Absolutheitsanspruch widersprochen

                              Nein. Konntest du gar nicht. Da war kein Absolutheitsanspruch.

                              Ja, ich denke, du hast zu schnell gelesen und die Lektüre ins falsche Auge bekommen.

                              Da stimme ich dir zu.

                              LLAP 🖖

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

                    Du bist und bleibst ein Eroberer des Nutzlosen. Ich find' das ja sehr charmant und mit ein Grund, warum ich immer wieder gerne in dieses Forum schau'…

          3. Hallo Klawischnigg.

            Wie immer denke ich, er will einfach ein Problem gelöst haben.

            Aber wie immer gibt es mehrere Lösungen, die jeweils verschiedene Vor- und Nachteile haben. Das Vorgehen mit dem Attributwert hat die Nachteile, gegen das Prinzip separation of concerns zu verstoßen und nur einen Listener registrieren zu können.

            Beim Programmieren gibts keine Haltungsnoten…

            Aber einerseits wartbaren und zukunftsfähigen Code und andererseits Spaghetticode.

            Edit: Christian war schneller 😀.

            Gruß
            Julius

      2. Hello,

        setze den Eventlistener mit der passenden JavaScript-Methode, dann kannst Du ihn mit removeeventlistener() auch wieder entfernen.

        Das ist gar nicht notwendig, wenn er einfach removeAttribute verwendet, braucht er keinen Eventlistener setzen…

        Dann müsste er aber wieder je einen einzelnen Eventlistener anmelden.

        Ich frage mich allerdings, was mehr Leistung kostet?

        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. Hi there,

          Das ist gar nicht notwendig, wenn er einfach removeAttribute verwendet, braucht er keinen Eventlistener setzen…

          Dann müsste er aber wieder je einen einzelnen Eventlistener anmelden.

          Ich frage mich allerdings, was mehr Leistung kostet?

          sorry, wie meinen? Ich schätz' einmal, seine onclick=irgendwas()-Attribute hat er vermutlich eh schon überall stehen…

          1. Hello,

            Ich frage mich allerdings, was mehr Leistung kostet?

            sorry, wie meinen? Ich schätz' einmal, seine onclick=irgendwas()-Attribute hat er vermutlich eh schon überall stehen…

            Welche Methode kostet das System mehr Leistung im Betrieb?

            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. Hi there,

              sorry, wie meinen? Ich schätz' einmal, seine onclick=irgendwas()-Attribute hat er vermutlich eh schon überall stehen…

              Welche Methode kostet das System mehr Leistung im Betrieb?

              Ich schätz' einmal, daß nicht nur Du den Unterschied nicht wirst messen können...😉

  2. ich habe seinerzeit mal eine Funktion (damals noch in nativem JS) erstellt, die ich über

    onClick='addiere(Position,Betrag)' 
    

    Nun würde ich gerne umsetzen, dass jede zeile nach dem anklicken nicht noch einmal angeklickt werden kann und stehe etwas auf dem Schlauch.

    Da du in deinem Beispiel einen String zuweist, gehe ich davon aus, dass du deinen Eventhandler im Markup als Attribut registriert hast. Ganz schlechte Praxis.

    Lösche das Attribut und registriere den Handler statt dessen in einem Script. Das Mittel der Wahl für diesen Zweck ist die Methode addEventListener.

    Du möchtest allerdings nicht für jedes deiner Elemente, bei denen es sich hoffentlich um Buttons handelt, einen eigenen Eventhandler registrieren, sondern du möchtest Event Delegation nutzen.

    Das heißt, du referenzierst in deinem Script zunächst ein gemeinsames Elternelement aller Buttons, für die eine Ereignisbehandlung eingerichtet werden soll.

    Das kannst du mit getElementById oder auch mit der Methode querySelector bewerkstelligen.

    Wenn du das Element hast, rufst du dann die Methode addEventListener auf und übergibst dabei den Namen des Ereignisses als String, hier also click, und deine Handlerfunktion.

    document.getElementById('parent').addEventListener('click', function (event) {
      const element = event.target;
    
      if (element.tagName === 'BUTTON') {
        // do something
    
        element.hidden = true;
      }
    
    });
    

    Die als zweites Argument an die Methode addEventListener übergebene Funktion wird beim Eintritt des Ereignisses automatisch mit einem Eventobjekt aufgerufen, mit dem in dem Beispiel oben der Parameter mit dem Namen event initialisiert wird.

    Dieses Objekt enthält in der Eigenschaft target eine Referenz auf das Elementobjekt, bei dem das Ereignis eingetreten ist, in diesem Fall also das Element auf das geklickt wurde.

    Dann wird geprüft, ob es sich bei diesem Element um einen Button handelt, indem wir den Wert der Eigenschaft tagName mit dem String BUTTON vergleichen. Handelt es sich um einen Button, dann führst du deinen Code aus und setzt anschließend das Attribut hidden des Buttons auf true.

    Das Attribut hidden wird für solche Elemente gesetzt, die noch nicht, nicht, oder nicht mehr inhaltlich relevant sind, was in der letzten Variante auf den geklickten Button zutreffen dürfte.

    Danach wird der Button nicht mehr angezeigt.

    1. Ein gemeinsamer Event-Handler, der Bubbling ausnutzt, und dann abfragt, ob das geklickte Element relevant ist und ob es schon geklickt wurde, wäre auch mein Ansatz. Ob nun über tagName Property oder anders (z.B. CSS-Klasse oder data-Attribut), das hängt vom Anwendungsfall ab.

      Aber: Beschreibung: Das hidden-Attribut zeigt an, dass ein Element nicht länger relevant ist und deshalb ausgeblendet wird.. Wenn das so gewünscht ist, ok. Das hat Lukas nicht geschrieben.

      Die Alternative ist, wie bereits erwähnt, ein data-Attribut. Ein "data-mybutton" kann man mit Werten wie "clickable" und "clicked" bestücken, und damit zwei Dinge erschlagen: (1) ist es ein Button, auf den der Handler reagieren muss, und (2) wurde schonmal geklickt. Die Werte des Attributs dürfen auch gerne passend zum Anwendungsfall vergeben werden, aber weil ich den nicht kenne, kann ich nichts vorschlagen.

      Rolf

      1. Aber: Beschreibung: Das hidden-Attribut zeigt an, dass ein Element nicht länger relevant ist und deshalb ausgeblendet wird.. Wenn das so gewünscht ist, ok. Das hat Lukas nicht geschrieben.

        Richtig. Deswegen können wir hier nur Möglichkeiten aufzeigen. Eine habe ich genannt.

        Die Alternative ist, wie bereits erwähnt, ein data-Attribut. Ein "data-mybutton" kann man mit Werten wie "clickable" und "clicked" bestücken, und damit zwei Dinge erschlagen: (1) ist es ein Button, auf den der Handler reagieren muss, und (2) wurde schonmal geklickt. Die Werte des Attributs dürfen auch gerne passend zum Anwendungsfall vergeben werden, aber weil ich den nicht kenne, kann ich nichts vorschlagen.

        Wenn wir einfach mal unterstellen, dass der Theo meint was er sagt, dann geht es ihm darum, dass eine bestimmte Aktion genau einmal ausgeführt werden soll, und danach nicht mehr.

        nach dem anklicken nicht noch einmal angeklickt werden kann

        Data-Attribute können gerne verwendet werden um zusätzliche Informationen für das Script bereitzustellen, aber was soll es bringen, den Handler nach einem Klick noch einmal aufzurufen, zu prüfen ob der Attributwert "clickable" oder "clicked" ist, um dann gegebenenfalls nichts zu tun?

        Eine Alternative ist, statt hidden das disabled-Attribut des Buttons zu setzen. Dann werden keine click-Events mehr an das Element verschickt, aber der Button wird − ausgegraut − weiterhin angezeigt, und der Zustand wird auch solchen Nutzern zugänglich gemacht, die auf AT angewiesen sind.

        1. Hello,

          Eine Alternative ist, statt hidden das disabled-Attribut des Buttons zu setzen. Dann werden keine click-Events mehr an das Element verschickt, aber der Button wird − ausgegraut − weiterhin angezeigt, und der Zustand wird auch solchen Nutzern zugänglich gemacht, die auf AT angewiesen sind.

          Ich würde das Ganze sowieso zuerst als reines Post-Form aufbauen und dafür sorgen, dass dann die Bedingung "Zeile ist nur einmal anklickbar" auch erfüllt wird. Und dann in das Post-Form die JavaScript-Komponenten einbauen. Das ist dann nicht mehr viel Arbeit.

          So passt dann zumindest der Fallback!

          Und dafür ist die Button-Variante mit "disabled" sicherlich ein guter Weg.

          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. Hi there,

    wenn Du 'this' als Parameter mitübergibst

    onClick='addiere(Position,Betrag,this)' 
    

    und in der Funktion addiere() als zB dritten Parameter, den wir 'o' nennen wollen übernimmst, dann kannst Du mit

    o.removeAttribute('onclick');
    

    einen weiteren Klick verhindern…