Jörg: Tabelle, viele Submit-Buttons und wie setze ich den Anker?

Hallo,

ich knüpfe an diesen Thread an und hoffe, dass das kein Doppelposting ist, da meine Frage wirklich nichts mehr mit dem Ursprungsthread zu tun hat. Das ist nämlich klasse gelöst worden durch Eure Hilfe.

Mein Problem ist wie folgt:

In einer Tabelle mit je Zeile einem Submitbutton würde ich gerne nach absenden des Formulars wieder an die Stelle in der Tabelle springen, an der der letzte Submitbutton geklickt wurde.

Wie geht man sowas programmiertechnisch an?

Ich vermute, dass man den Anker nur per Javascript vom Button in den über der Tabelle notierten form-tag bekommt. Richtig?

Gruß, Jörg

  1. Lieber Jörg,

    bitte vergiss nie, dass im action-Attribut des Formulars eine URL steht. Und eine URL kann auch einen Hash haben, der innerhalb der Zielresource an eine bestimmte Stelle zeigt:

    <form action="meine_seite.php#meine_stelle">

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. bitte vergiss nie, dass im action-Attribut des Formulars eine URL steht. Und eine URL kann auch einen Hash haben, der innerhalb der Zielresource an eine bestimmte Stelle zeigt:

      <form action="meine_seite.php#meine_stelle">

      Hallo Felix,

      danke für den Tip. Soweit warmir das aber auch schon klar.

      Mein Proiblem ist nun nur, wie ich aus "#meine_stelle" einen dynamischen Link mache, der aber nur clientseitig dynamisch gefüllt werden darf.

      Denn ich habe ja je Tabellenzeile einen eigenen Submitbutton. Aber ich habe nur einen einzigen form-tag. Also müsste der jeweilig geklickte Submitbutton per Javascript den "#meine_stelle-Teil" dynamisch setzen.

      Und genau hier hakt es. Das kann ich nicht.

      Oder aber es gäbe eine andere Lösung...?

      Grüße, Jörg

      1. Hallo Jörg,

        bitte vergiss nie, dass im action-Attribut des Formulars eine URL steht. Und eine URL kann auch einen Hash haben, der innerhalb der Zielresource an eine bestimmte Stelle zeigt:
        <form action="meine_seite.php#meine_stelle">
        danke für den Tip. Soweit warmir das aber auch schon klar.

        was ist also konkret dein Problem?

        Also müsste der jeweilig geklickte Submitbutton per Javascript den "#meine_stelle-Teil" dynamisch setzen.

        Genau.

        Und genau hier hakt es. Das kann ich nicht.

        Warum nicht? Gib jedem Submit-Button einen onclick-Handler, der das action-Attribut des übergeordenten Formulars neu setzt. Dann wird beim Klick erst diese Aktion ausgeführt und so das Formularziel "korrigiert", und dann erst das Formular abgesendet.

        So long,
         Martin

        --
        Die meisten Menschen werden früher oder später durch Computer ersetzt.
        Für manche würde aber auch schon ein einfacher Taschenrechner genügen.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Warum nicht? Gib jedem Submit-Button einen onclick-Handler, der das action-Attribut des übergeordenten Formulars neu setzt. Dann wird beim Klick erst diese Aktion ausgeführt und so das Formularziel "korrigiert", und dann erst das Formular abgesendet.

          Was soll eigentlich dieses nicht skalierbare Konzept mit dem Absenden ganzer Tabellen, wobei letztlich nur ein Datensatz aktualisiert werden soll?

          Mit Verlaub. Ich würde pro Datensatz ein form Element verwenden.
          Aber die Markup Frage hat in der Folge zu einer betrieblich falschen Strategie geführt, nur weil man sich auf Tabellen festgelegt hat.

          mfg Beat

          --
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
          1. Mit Verlaub. Ich würde pro Datensatz ein form Element verwenden.
            Aber die Markup Frage hat in der Folge zu einer betrieblich falschen Strategie geführt, nur weil man sich auf Tabellen festgelegt hat.

            Das sehe ich _nicht_ so. Das Markup (Tabelle) ist fix, denn wenn nicht hier Tabelle, wo dann?

            Ein Form-Element pro Datensatz könnte ich aber auch innerhalb der Tabelle machen. Nur dürfte ich dann nur 1 Zelle, nicht aber eine Zeile verwenden.

            Gruß, Jörg

            1. Lieber Jörg,

              in Deinem vorherigen Thread war von Daten die Rede wie etwa "Artikel mit Artikelnummer, Bezeichnung, Ek und VK". Das bedeutet wohl, dass Deine "große Tabelle" genau einen Artikel beinhaltet, richtig? Oder willst Du in dieser Tabelle gleich _alle_ Artikel samt ihren Eigenschaften erschlagen? In letzterem Falle hätte beat dann aber zurecht kritisiert!

              Das sehe ich _nicht_ so. Das Markup (Tabelle) ist fix, denn wenn nicht hier Tabelle, wo dann?

              Es geht nicht um die Frage, ob Du die Seite mittels einer Tabelle strukturierst, oder nicht. Es geht um die Frage, wie Du Deine Datensätze editierbar machst. Ob Du alle Datensätze in ein einziges Formular packst, oder ob Du für jeden Datensatz ein eigenes Formular (in Deiner Tabelle) anbietest, was serverseitig zu einer ganz anderen Form der Verarbeitung führt.

              Ein Form-Element pro Datensatz könnte ich aber auch innerhalb der Tabelle machen. Nur dürfte ich dann nur 1 Zelle, nicht aber eine Zeile verwenden.

              Jetzt aber mal "Butter bei die Fische": Was genau ist bei Dir ein Datensatz?

              Liebe Grüße,

              Felix Riesterer.

              --
              ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
              1. Jetzt aber mal "Butter bei die Fische": Was genau ist bei Dir ein Datensatz?

                Hi Felix,

                ein Datensatz ist eine Tabellenzeile.

                In dieser einen Zeile sollen Artikelnummer, Bezeichnung, EK und VK editierbar sein.

                Diese 4 Felder sollen jeweils in einer eigenen Tabellenspalte stehen.

                Am liebsten wäre mir, ich würde einen form-tag je Tabellenzeile (=Datensatz) verwenden können.

                Ich will zwiungend an einer Tabelle festhalten.

                Das ganze soll valides HTML sein.

                Danke für Eure Hilfe und die vielen Tips

                Jörg

                1. Ich will zwiungend an einer Tabelle festhalten.

                  Nein, du willst an tabellarischer Darstellung festhalten.

                  mfg Beat

                  --
                  ><o(((°>           ><o(((°>
                     <°)))o><                     ><o(((°>o
                  Der Valigator leibt diese Fische
                  1. Ich will zwiungend an einer Tabelle festhalten.

                    Nein, du willst an tabellarischer Darstellung festhalten.

                    No!
                    Ich will Tabelle!

                    Gruß, Jörg

          2. Lieber Beat,

            Was soll eigentlich dieses nicht skalierbare Konzept mit dem Absenden ganzer Tabellen, wobei letztlich nur ein Datensatz aktualisiert werden soll?

            in dieser Hinsicht gebe ich Dir vollkommen Recht.

            Mit Verlaub. Ich würde pro Datensatz ein form Element verwenden.

            Das ist die logischste Vorgehensweise - interessant, dass wir das bisher nicht angemäkelt hatten... Da ich die vorausgegangene Diskussion nicht nachgeschlagen hatte, war ich jetzt davon ausgegangen, dass sich diese Frage bereits gestellt hatte.

            Aber die Markup Frage hat in der Folge zu einer betrieblich falschen Strategie geführt, nur weil man sich auf Tabellen festgelegt hat.

            Zugestanden.

            Liebe Grüße,

            Felix Riesterer.

            --
            ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
          3. hi,

            Mit Verlaub. Ich würde pro Datensatz ein form Element verwenden.

            Das würde ich aber auch sagen. In der Tabelle ist dazu ein Link, womit das Form aufgerufen werden kann.

            Hotti

        2. Lieber Martin,

          Gib jedem Submit-Button einen onclick-Handler, der das action-Attribut des übergeordenten Formulars neu setzt.

          dazu dann der Hinweis, dass das mit JavaScript geht, und dass man mittels "this" auf das Button-Element zugreifen kann, das wiederum seine eigenen <http://de.selfhtml.org/javascript/objekte/node.htm#parent_node@title=Elternelemente kennt>, die es im DOM-Baum aufwärts durchforsten kann, um letzten Endes das <form> zu finden. Wenn der Submit-Button ein <input type="submit" /> ist, dann geht das auch schneller mit this.form:

          <input type="submit" value="absenden?" onclick="this.form.action += '#hierher_bitte'" />

          Eventuell kann man eine generelle Funktion definieren, die den Hashwert selbst ermitteln kann, sodass man keine server-seitige Befüllung der onclick-Attribute vornehmen muss, sondern nur am Ende des Dokuments ein initialisierendes JavaScript bemüht, das allen submit-Buttons diese Funktion als onclick-Eigenschaft zuweist...?

          Liebe Grüße,

          Felix Riesterer.

          --
          ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
          1. Lieber Martin,

            Gib jedem Submit-Button einen onclick-Handler, der das action-Attribut des übergeordenten Formulars neu setzt.

            Hi Felix,

            danke für den Wink. Genau so habe ich es  nun umgesetzt und alles klappt prima.

            Gruß, Jörg

        3. Und genau hier hakt es. Das kann ich nicht.

          Warum nicht? Gib jedem Submit-Button einen onclick-Handler, der das action-Attribut des übergeordenten Formulars neu setzt.

          Ja, soweit, so klar.

          Also habe ich eine Funktion in Javascript in  dieser Art:

            
          <script type=\"text/javascript\">  
          function changeText(a){  
          document.getElementById('anker').innerHTML = a;  
          }  
          </script>  
          
          

          übergebe das mit dem Submitbutton in dieser Art:

          <input type='button' onclick='changeText("neuer_Anker")' value='Change Text'/>

          aber wie formuliere ich von der Syntax her meinen Form-Tag?

          <form action='script.php?update' method='post' ...

          Gruß, Jörg

          1. Hi,

            Warum nicht? Gib jedem Submit-Button einen onclick-Handler, der das action-Attribut des übergeordenten Formulars neu setzt.
            Ja, soweit, so klar.

            anscheinend nicht so ganz. ;-)

            Also habe ich eine Funktion in Javascript in  dieser Art:

            <script type="text/javascript">

            function changeText(a){
            document.getElementById('anker').innerHTML = a;
            }
            </script>

              
            Damit fängst du in diesem Fall nichts an, denn dieser Code setzt nur den \*Inhalt\* eines Elements mit der ID "anker" neu, aber kein \*Attribut\*. Eigentlich hat [Felix](https://forum.selfhtml.org/?t=203594&m=1376965) schon sehr schön die Richtung aufgezeigt, indem er auf das Keyword this hingewiesen hat, und dass Formularelemente eine Referenz auf ihr übergeordnetes Formular enthalten.  
              
            Also angenommen, das sei Datensatz #29:  
             <input type="submit" name="s029" onclick="this.form.action='script.php?update#'+this.name;" ...>  
              
            Dann musst du nur noch dafür sorgen, dass ein Element dieses Datensatzes auch die ID s029 bekommt, damit der Anker auch ein Ziel findet.  
              
            Wenn man es jetzt noch "schöner" machen möchte, notiert man den Eventhandler nicht im HTML, sondern setzt ihn ebenfalls per Javascript. Aber das ist dann vielleicht die nächste Ausbaustufe in Richtung Eleganz. ;-)  
              
            So long,  
             Martin  
            
            -- 
            [Funktion und Referenz](http://community.de.selfhtml.org/zitatesammlung/zitat114) auf diese sind mir bekannt, mit Zeigern kann ich nicht viel mehr anfangen, als damit auf Buttons zu klicken.  
              (Ashura)  
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(