Ankündigung

Einklappen
Keine Ankündigung bisher.

(this) scope, Werte aus elementen rauslesen die nicht im Scope sind

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • (this) scope, Werte aus elementen rauslesen die nicht im Scope sind

    Hallo allerseits


    ich habe eine Verständnis Frage, irgendetwas will nicht in mein kleines Hirn rein. Hoffe die Frage ist hier richtig.


    Ich lese mit Ajax (php.file) aus einer Mysql Einträge einer Datenbank raus und lasse es mit einem PHP loop anzeigen.

    z.B. so:

    *** loop anfang
    <input type='text' id='projekt_alt' value='". $row['projekte_id']."'>

    <input type='text' id='tt_current' value='". $row['tt_id']."'>

    <button type='button' data-id8='".$row['projekte_id']."' data-id9='".$row['tt_id']."'' name='' id='change_project_btn'>ändern</button></div>

    *** loop ende


    Mein Verständnis ist nun, dass ich mit jquery mit z.B.
    var tt_id = $(this).data("id9"); den jeweiligen wert des Eintrages rauslesen kann, was auch funktioniert.


    Nun meine Frage, wenn ich aber z.B. vom ersten Input Type den Wert von projekt_alt rauslesen möchte geht das nicht, weil 'this' nicht im Scope (Button) ist. Heisst das ich muss im Button drin, nochmals jeweils eine ID machen welche den Wert $row['projekte_id'] beinhaltet? Sprich ich muss für all die Werte die ich beim Button drücken rauslesen will, die Werte nochmals als data-id im Button einbeten?

    Ich hoffe die Frage ist verständlich...

    Vielen Dank im Voraus
    Liebe Grüsse
    Oli

  • #2
    Mein Verständnis ist nun, dass ich mit jquery mit z.B.
    var tt_id = $(this).data("id9"); den jeweiligen wert des Eintrages rauslesen kann, was auch funktioniert.


    Nun meine Frage, wenn ich aber z.B. vom ersten Input Type den Wert von projekt_alt rauslesen möchte geht das nicht, weil 'this' nicht im Scope (Button) ist.
    Du kannst auch alle anderen selectoren für jquery verwenden:
    https://api.jquery.com/category/selectors/

    Du mußt nicht this nehmen.

    Kommentar


    • #3
      Danke. Das habe ich, so glaube ich verstanden. Allerdings habe ich ja das problem das die verschiedenen Loop-Instanzen nicht eindeutig identifizierbar sind, sprich die input type IDs sind in allen loop Einträge nicht voneinander unterscheidbar... oder sehe ich das falsch?

      also wenn mein Loop 30 Einträge hat und ich mit jquery den Wert projekt_alt auslese, gibt er mir immer den Wert der ersten Loop Instanz zurück...

      Kommentar


      • #4
        Aus Deinem Post ging nicht hervor, daß Du id's merhmals nutzt, was man nicht tun sollte.
        Deswegen sollte man da in der loop bspw. eine Zahl dranhängen.
        Du kannst auch den eventistener auf das übergornete div setzen, von dem Du den closing tag gepostet hast und auf Id's wohlmöglicch verzichten.



        Kommentar


        • #5
          ach so, ja das tut mir leid.

          Wenn ich dich richtig verstanden habe für den loop:

          for $i .......
          {

          <input type='text' id_proj" . $i . "='projekt_alt' value='". $row['projekte_id']."'>

          <input type='text' id_current" .$i ."='tt_current' value='". $row['tt_id']."'>

          <button type='button' data-id8='".$row['projekte_id']."' data-id9='".$row['tt_id']."'' name='' id='change_project_btn'>ändern</button></div>

          }


          beim eventlistener auf das übergeordnete DIV setzen, da steh ich mächtig auf dem Schlauch... hättest du mir dazu evtl ein Beispiel?

          Grüsse
          Oli

          Kommentar


          • #6
            sieht nicht so toll aus dein Code, nutze mal Code Tags [php][/php] bspw.
            Ich hab auch kein Plan, was da generiert rauskommen soll.

            event delagation?
            https://molily.de/js/event-handling-effizient.html

            Kommentar


            • #7
              Vielen Dank für den Hinweis, ich werde es mit event delegation versuchen.

              Kommentar


              • #8
                Zitat von olevski Beitrag anzeigen
                Vielen Dank für den Hinweis, ich werde es mit event delegation versuchen.
                Gute idee,
                und das nächste mal bitte kein PSEUDO Code mehr, un din tags.
                Viel Erfolg soweit.

                Kommentar


                • #9
                  Kannst du nicht auch einfach um deine 3 Input Boxen ein DIV legen, und dann mit $(this).parent().find('.projekt_alt') auf das Element zugreifen?
                  Dafür dann die ID Tags in class Tags umbennen.

                  Kommentar


                  • #10
                    tomBuilder, ja werde ich nächstes mal machen. Sorry für die Umstände.
                    Zeichen32, super Idee, das hat wunderbar geklappt!¨Vielen Dank!

                    Kommentar


                    • #11
                      Du kannst auch den eventistener auf das übergornete div setzen, von dem Du den closing tag gepostet hast und auf Id's wohlmöglicch verzichten.
                      Zitat von Zeichen32 Beitrag anzeigen
                      Kannst du nicht auch einfach um deine 3 Input Boxen ein DIV legen, und dann mit $(this).parent().find('.projekt_alt') auf das Element zugreifen?
                      Dafür dann die ID Tags in class Tags umbennen.
                      Eben, meinte ich auch so...
                      Classen würde ich für CSS benützen, und das data-attribut nutzen
                      https://wiki.selfhtml.org/wiki/HTML/...data-Attribute

                      Zudem macht es sicher Sinn, die ganze loop in ein div zu packen, und dort ein event.listerner zu nutzen, anstatt in der Loop soviele wie eben elemente vorhanden sind.

                      Kommentar

                      Lädt...
                      X