Beiträge von Sempervivum

    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.

    Das ist relativ einfach zu machen und Du brauchst weder eine Javascript-Bibliothek noch GD oder Imagick. Letztere hätten sogar Nachteile weil Du damit ein Rasterbild erzeugen würdest, was sich nicht so gut skalieren und responsiv machen lässt.

    Die Parameter, die der Benutzer eingibt, kannst Du in einer JSON-Datei auf dem Server speichern.

    Dann die Texte mit CSS über dem Bild positionieren, entweder mit absoluter Positionierung oder über Gridlayout, indem Du beides in die selbe Zelle legst.

    Edit: Ich hatte das zunächst so verstanden, dass der Betreiber der Website das machen soll. Oder soll jeder Besucher es machen? Dann müsste eine Benutzerverwaltung her, es sei denn, die Parameter müssen nicht dauerhaft auf dem Server gespeichert werden.

    Ich habe mir das jetzt angesehen. Du hast das mit inline-notierten Eventlistenern gemacht und das wird dann ein wenig lang. Daher habe ich es ein wenig kompakter angelegt mit einer Funktion, der man ein oder mehrere IDs übergibt und die dann die zugehörigen p-Elemente sichtbar und alle anderen unsichtbar macht:

    Die Funktion muss außerhalb des document-ready liegen, damit sie später verfügbar ist.

    Die Eventlistener musst Du dann anpassen und diese Funktion verwenden:

    Soll gar kein p-Element angezeigt werden, musst Du ein leeres Array übergeben:

    Code
    showHide([]);

    Auf diese Weise können wir auch beim Reset alle Elemente verbergen:

    Code
            <p style="display:none;" id="p7">
                <input style="height: 40px; width: 308px; font-size:20px; color:#fafafa; background-color: #1c9407;"
                    id="send-it" type="button" value="Übertragen"><br><br>
                <input style="height: 30px; width: 308px; font-size:20px; color:#fafafa; background-color: #cf0a35;"
                    type="button" value="Reset" onClick="showHide([]);">
            </p>

    Das Ganze habe ich nur oberflächlich getestet, einen genauen Test überlasse ich dir.

    Glücklicherweise war es (noch) kein Problem mit dem Ajax sondern es lag daran, dass das Auslesen des selektierten Textes bei Select2 etwas anders funktioniert: value liefert nicht den kompletten Text sondern nur die Nummer aber glücklicher Weise haben wir noch unser Objekt mit der Nummer als Schlüssel und können daraus den Titelnamen leicht ermitteln. So wie ich das jetzt gemacht habe, wird das nicht bei manueller Eingabe funktionieren, aber lass es uns erst Mal so zum Laufen bringen.

    Es gab dann noch kleinere Probleme mit den Scopes, deshalb habe ich jetzt alles Javascript im document-ready zusammen gefasst, siehe Anhang.

    Den inline-Eventlistener kannst Du dann in dem Übertragen-Button löschen:

    Code
                <input style="height: 40px; width: 308px; font-size:20px; color:#fafafa; background-color: #1c9407;"
                    id="send-it" type="button" value="Übertragen"><br><br>
                <input style="height: 30px; width: 308px; font-size:20px; color:#fafafa; background-color: #cf0a35;"
                    type="button" value="Reset" onClick="location.href=location.href">

    Für dich selber kannst Du problemlos ein Neuladen der Seite am Cache vorbei durch Strg+F5 erzwingen. Bei der Entwicklung reicht das normaler Weise aus.

    Wenn Du auch für die Besucher sicher stellen willst, dass sie die neueste Version laden, kannst Du z. B. eine Versionsnummer an die URL hängen, so:

    Code
    <link rel="stylesheet" href="css/select2.css?version=3">
    <script src="js/select2.js?version=4"></script>

    Und wenn Du dich in Javascript bewegst und z. B. fetch benutzt, geht das automatisch wenn Du einen Zeitstempel benutzt:

    Code
    fetch('die-url.php?time=' + Date.now(), {
        // hier ggf. die Optionen
    }).then

    Gerade hier hat mich der Cache, ebenso wie bei dir, früher zur Verzweiflung gebracht, weil ich über Stunden Fehler im Skript gesucht habe und es lag nur am Cache.

    Guten Morgen,

    hier eine Demo, mit der ich das getestet habe:

    Pfade musst Du wieder anpassen.

    Wie Du siehst, habe ich das Format der Liste als Ausgangsbasis genommen, das wir bisher hatten. Wenn Du die vollständige Liste mit den 250 Titeln in einem anderen Format hast, brauchst Du sie nicht umzuändern, wir können das sicher automatisch machen.

    Zitat

    Nach meinen Recherchen gibt es anscheinend keine Möglichkeit mit den Select so zu arbeiten wie mit einer Datalist. Sollte ich damit richtig liegen, würde dies ja heißen ich müsste für alle vier betroffenen Eingabefelder ein Select einfügen und die Werte doppeln...

    Ja, das trifft zu. Aber die gute Nachricht ist, dass man das automatisch durch das Skript machen kann.

    Wir hatten ja zuletzt die Daten in einem Javascript-Objekt ab gelegt:

    Daraus kann man problemlos die einzelnen Selects erzeugen.

    ...

    Als ich das so weit geschrieben hatte, fiel mir ein, dass Select2 das schon eingebaut hat, siehe hier:

    The Select2 data format | Select2 - The jQuery replacement for select boxes

    Gleich der erste Abschnitt.

    Dann kann man mit Select2 doch mit einer gemeinsamen Datenquelle arbeiten, nur dass sie dann keine Datalist ist sondern das Javascript-Objekt.

    Zitat

    Funktioniert auch? Warum?

    Das HTML ist ja ein vollständiges Select (wenn man mal von den drei Punkten absieht) und das funktioniert auch ohne das Javascript. Nur, bei 250 Einträgen würde es sich über ca. 10 Seiten erstrecken und wäre schwer zu bedienen. Und jQuery kannst Du hier herunter laden:

    Download jQuery | jQuery

    Gleich das erste, compressed, production.

    (Eigentlich wollte ich das in #75 posten aber habe die falsche URL erwischt.)