ID übergabe an AJAX bei Klick auf DIV

  • Hallo,


    ich bin ganz neu im Thema AJAX.

    Ich habe eine Tabelle mit Daten aus einer MYSQL Datenbank befüllt.

    Nun möchte ich beim Klick in eine Spalte (CLick Event auf ein DIV)die Details zum gewählten Datensatz anzeigen lassen.

    Soweit funktioniert das auch, jedoch bekomme nicht die richtige ID übertragen, sonderon immer nur ID1 also die ID vom ersten Datensatz.

    Ändere ich das Script in soweit das ich eine Checkbox anklicke, funktioniert alles nur das ich eben eine Checkbox brauche und nicht einfach "irgendwo" in die Zeile klicken kann um den Datensatz zu wählen.

    Hier mein Code

    Kann mir jemand sagen wie ich mit einem Klick auf das DIV auf die richtige Zeile verweise?

  • Häufige Aufgabe und häufiges Problem:

    Da Du die Zeilen in einer Schleife erzeugst, tritt die selbe ID mehrfach auf. Gefunden wird dann, wie Du richtig beobachtest, immer die erste, egal welche Zeile Du klickst.

    Lösung: In deinem Eventhandler findest Du unter this die Zeile, in die geklickt wurde. Davon ausgehend kannst Du mit "find" die Checkbox ermitteln und den Wert heraus holen:

    Code
     $('.row').click(function(event){
        event.preventDefault();
        const tourid = $(this).find('.ud_radio').val();
        $.ajax({

    (ungetestet)

    Dazu musst Du natürlich statt einer ID "ud_radio" eine Klasse verwenden.

  • Vielleicht noch ein Hinweis zu dem PHP-Teil. Das ist einfach nur grausam und unübersichtlich:

    Code
    echo '<div class="row"><div class="flex-item"><input type="checkbox" id="ud_radio" name="tourid"  value="'.$row['id'].'"></div><div class="flex-item">'.$row['startdatum'].'</div><div class="flex-item"><div class="start">'.$row['land_start'].'</div><div class="start">'.$row['plz_start'].'</div><div class="start">'.$row['start'].'</div></div> <div class="flex-item">'.$row['enddatum'].'</div><div class="flex-item">'.$row['ende'].'</div> <div class="flex-item">'.$row['preis'].'€</div></div>';

    Warum nicht so:

    Wenn man Fehler sucht oder einen Debugger benutzt, dann ist deine Version komplett unbrauchbar.


    Und dann noch:

    Beim Einsatz von SQL-Datenbanken sollte das Abrufen aller Spalten eines Datensatzes per SELECT * vermieden werden. Stattdessen sollten die gewünschten Spaltennamen explizit aufgelistet werden (SELECT col1, col2 FROM …). Einige Vorteile:


    Häufig werden in einer Abfrage nicht alle Spalten benötigt, die aktuell existieren oder in Zukunft existieren könnten, sodass unnötige Daten übertragen werden.

    Bei expliziter Angabe der gewünschten Spalten können Datenbanksysteme unter Umständen Indizes zur Beantwortung von Abfragen nutzen.

    Eine Auflistung der Spaltennamen macht den Code verständlicher, da die Tabellenstruktur nicht erst im Datenbankschema nachgelesen werden muss.

    Bei Änderungen am Datenbankschema (etwa bei Entfernung oder Umbenennung einer Spalte) schlägt eine Query, die kein SELECT * nutzt, sofort fehl. Das ist hilfreich, da so keine Stelle im Code übersehen werden kann, an der wahrscheinlich auch die PHP-Datenstrukturen an das neue Schema angepasst werden müssen.

  • Was das SELECT * betrifft, verdient noch ein weiterer Gesichtspunkt, erwähnt zu werden: Die Abfrage wird nennenswert schneller. Ich wollte das zunächst nicht glauben, aber ein eigener Test, Versuch macht kluch, hat mich eines Besseren belehrt: Der Gewinn lag im zweistelligen Prozentbereich.


    Edit, ein weiterer Hinweis: Anscheinend bildest Du in deinem HTML eine Tabelle mit Divs und Flexlayout nach. Zunächst einmal wäre dafür ein Gridlayout besser geeignet. Aber Du schießt da ein wenig über das Ziel hinaus: Eine Tabelle einzusetzen ist nicht generell schlecht. In deinem Fall handelt es sich definitiv um tabellarische Daten und es spricht nichts dagegen, sie mit einer HTML-Tabelle anzuzeigen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!