Beiträge von Sempervivum

    Verstehe, so wird das alles jetzt viel klarer.

    Zitat

    In der Html Datei habe ich dann einige Karten erstellt und mit der hinzufuegen Methode an das Array angehangen. Das klappt soweit auch.

    Das bedeutet, dass wir jetzt auf der einen Seite das Array in der Visitenkartenliste haben und auf der anderen die HTML-Elemente. Vermutlich sind beide parallel aufgebaut, aber besser als uns darauf zu verlassen wäre es, eine Referenz im HTML-Element auf das Array in der Visitenkartenliste zu hinterlegen. Dafür eignet sich ein data-Attribut: data-idx="5".

    Also den Index beim Hinzufuegen zurück geben und in das data-Attribut eintragen:

    Code
        hinzufuegen(name, adresse,telefonnummer, fax) {
            let idx = this.karten.length;
            let k = new Visitenkarte(name, adresse,telefonnummer, fax);
            
            this.karten.push(k);
            return idx;
        }

    Und dann im Eventhandler:

    Code
                let domObjArr = document.getElementsByClassName('Visitenkarte');
                for(let i=0; i < domObjArr.length; i++)
                    domObjArr[i].addEventListener('click', function(){
                        let idx = this.dataset['idx'];
                        let karte = visitenkartenliste.holen(idx);
                        karte.showVisitenkarte();
                    });
                }

    Wenn man es so macht, braucht man noch die Funktion holen in der Liste, die kannst Du selber hinzufügen. Alles ungetestet.

    Zitat

    Die Funktion showVisitenkarte ist nicht definiert steht dort. Könnte das daran liegen, dass die Funktion aus der Klasse Visitenkarte kommt und daher noch einen "Bezugspunkt" braucht?

    Von Klassen habe ich in dem Code, den Du bisher gepostet hast, nichts gesehen. Dann müsstest Du wieder etwas mehr Code posten.

    Zitat

    domObjArr[i].showVisitenkarte(i); funktioniert leider auch nicht, laut Konsole ist das keine gültige Funktion.

    Nein, das kann so nicht funktionieren, denn bei diesem Element in dem Array gibt es die Funktion nicht.

    Das ist mir die ganze Zeit schon aufgefallen: Dieses domObjArr ist ja eine Nodelist, d. h. im wesentlichen ein Array von DOM-Elementen. Und aus diesen Elementen müsstest Du den Text erst heraus lesen. Einfacher wäre es, das Array zu verwenden, das die Basis für die erste Tabelle ist.

    Dann habe wir allerdings aneinander vorbei geredet. Eine Tabelle ist hier eigentlich fehl am Platz aber das wollen wir mal nicht so eng sehen.

    Wir können dann das mit den Zeilen in der zweiten Tabelle weg lassen und Du kannst, wie Du es anfangs vor hattest, mit innerHTML die Daten in die Tabellenzellen übertragen:

    Nein, mit innerHTML warst Du nicht auf dem Holzweg, Du musst den Code oben ja noch ergänzen und beim Eintragen in die Tabellenzellen wirst Du es benötigen.

    Auch mit den IDs warst Du nicht auf dem Holzweg, es wäre auch damit gegangen, nur müssten dann alle Zellen der Tabelle mit einer ID ausgestattet sein. Du schriebst, dass die Tabelle vorgegeben ist und ich wusste nicht, ob Du dort IDs eintragen kannst.

    Versuche dieses zu vervollständigen:

    Und benutze beim Posten von Code bitte Codetags, das Symbol </> oben rechts.

    Leider hast Du immer noch das Einbinden von jQuery ganz am Schluss drin:

    Code
        <script src="assets/js/PHP-Contact-Form-dark-1.js"></script>
        
        <!-- das folgende muss geloescht werden: -->
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    
    </body>
    </html>

    Wie oben schon geschrieben: Dadurch werden die durch die Skript hinzu gefügten Funktionen wieder gelöscht. Wirf einen Blick in die Console.

    Ich würde das nicht mit IDs aufziehen, denn dann bist Du davon abhängig, dass die Tabellenzellen IDs haben. Du kannst problemlos auf die Zeilen und Zellen der Tabelle mit Indizes zugreifen, diese Demo zeigt es:

    Code
                const rows = document.querySelector('table').rows;
                for (let i = 0; i < rows.length; i++) {
                    const theRow = rows[i];
                    for (let j = 0; j < theRow.cells.length; j++) {
                        const theCell = theRow.cells[j];
                        console.log(theCell.textContent);
                    }
                }

    Offene Frage: Wie wird die Zeile ausgewählt? Immer die erste Zeile füllen, die noch nicht belegt istß

    Am besten den geänderten Stand mit Zeilenumbrüchen hoch laden, damit man es sich in Aktion ansehen kann.

    Hat denn das Versenden zuvor funktioniert, als noch eine neue Seite geladen wurde?

    Ich hatte mir das früher angesehen und dieses:

    Code
        <script src="assets/js/PHP-Contact-Form-dark.js"></script>
        <script src="assets/js/PHP-Contact-Form-dark-1.js"></script>

    schienen mir die Javascripts für das Abschicken des Formulars und die Validierung zu sein.

    d. h. Zeile 6 ist wahrscheinlich entbehrlich.

    Und Zeile 17 löschen, das jQuery muss ganz am Anfang eingebunden sein und ist es auch in Zeile 1. Bindest Du es am Schluss ein, werden die Funktionen, die die anderen Skripts hinzu fügen, wieder gelöscht.

    Auf kulturbewegung.de fehlen auch die Zeilenumbrüche, vor ein paar Tagen war das noch nicht der Fall. Möglicher Weise hast Du in VS-Code etwas verstellt?

    Hast Du mal eine Blick in die Console geworfen? Dort werden einige Fehler angezeigt. Der Grund ist, dass Du jQuery mehrfach eingebunden hast und dass die Reihenfolge nicht stimmt.

    So wäre es richtig:

    Wie ich sehe, benutzt das Javascript jQuery und einen Validator. Möglicher Weise ist der Grund, dass Du auf die neue Seite gelangst, dass Du jQuery nicht eingebunden hast. Binde es ein, frage deinen Bekannte, welcher Validator das ist und binde diesen ebenfalls ein.

    BTW: Du hast zwar erfreulicher Weise Codetags benutzt aber irgend wie ist mit dem Code etwas falsch gelaufen, weil die Zeilenumbrüche fehlen.