Beiträge von Sempervivum

    Das Problem ist, dass die Frage mit den Antworten auch neu aufgebaut werden muss, sonst läuft das i = 0; ins Leere:

    Wie ich schon in dem Kommentar geschrieben habe, schreit das natürlich danach, in eine Funktion ausgelagert zu werden, dann jetzt haben wir diesen Codeblock schon drei Mal.

    Eines hast Du ja schon sehr richtig gemacht: Ein Array verwendet und nur einen Satz von Funktionen anstatt den Code zu vervielfachen wie es viele Anfänger tun.

    Was mir sofort ins Auge springt ist die Tatsache, dass sich das immer gleiche HTML im Array wiederholt. Das würde ich als erstes angehen.

    Also das HTML nur ein Mal statisch anlegen und darin die Teile, die sich verändern, mit Javascript austauschen:

    Und das Array mit den Daten so:

    JavaScript
            const questions = [
                {
                    question: 'Welche Band veröffentlichte 1980 das Album "Paris"?',
                    answers: ['Queen', 'Visage', 'Supertramp', 'ELO'],
                    isCorrect: [false, false, true, false]
                },
            ];

    Wenn Du das so aufziehst, kannst Du darauf verzichten, die Eventlistener bei jedem Klick neu zu registrieren.

    Das Javascript dazu zu schreiben überlasse ich dir. Wenn Du nicht zum Ziel kommst, melde dich wieder.

    Auch in diesem Fall kann man sich andere Varianten überlegen. Was sich ebenfalls anbieten würde, ist, mit Templates zu arbeiten, d. h. im HTML Platzhalter einzubauen und diese dann gegen die aktuellen Werte auszutauschen. Für solche Platzhalter benutzt man häufig doppelte geschweifte Klammern: {{name}} weil diese normaler Weise im HTML nicht vorkommen.

    Dafür gibt es auch Bibliotheken, die es vereinfachen. Vor längerer Zeit habe ich z. B. Handlebars kennen gelernt aber ich weiß nicht, ob das noch aktuell ist.

    Ich habe das mal getestet und bei mir funktioniert es einwandfrei. Wie legst Du denn das HTML des Modals an? Wenn man es statisch in das übrige HTML schreibt ist es zunächst nicht sichtbar und man muss es mit open öffnen. Wie machst Du das?

    Zitat

    die restlichen Funktionen wie "Destroy" und "refreshData" funktionieren dann auch nicht mehr.

    Das weist darauf hin, dass irgend wo ein Syntaxfehler steckt. Sagt die Console etwas dazu?

    Genau verkehrt herum, Du musst die Tabelle erst laden und dann initialisieren. Und dabei berücksichtigen, dass das Laden einen kurzen Moment dauert, daher die Initialisierung im Callback des load:

    Code
    success: function(data) {
        if(data) {
            table.destroy();
            $("#refreshData").load("verzeichnis.php?folder=" + folder2 + " #refreshData",
                function(){
                    table = $('#verzeichnis').DataTable();
            });
        }
    }

    Was das Problem mit Datatables betrifft, so vermute ich, dass Du mit dem jQuery-load die Tabelle komplett überschreibst. Dabei bleibt aber alles, was Datatables hinzu gefügt hat und was außerhalb der Tabelle liegt, erhalten.

    Informiere dich über die Funktion destroy:

    https://datatables.net/reference/api/destroy()

    zerstöre damit die Tabelle vor dem Aktualisieren, dann lade sie mit deinem jQuery-load neu und initialisiere sie wieder.

    Eleganter wäre es, die Tabelle mit dem eingebauten Ajax von Datatables zu laden, denn dann könntest Du sie einfach mit reload neu laden, siehe hier:

    https://datatables.net/reference/api/ajax.reload()

    Aber dazu wären wahrscheinlich einige Anpassungen auch am PHP-Skript nötig, weil es dann JSON statt HTML liefern muss.

    Zitat

    Dann bleibt alles am Breakpoint stehen.

    Das ist ja genau was wir wollten.

    Zitat

    Beim Fortsetzen steht in der Konsole "[Violation] 'click' handler took 9070ms"

    kenne ich von meinem Browser (Opera) bzw. dessen Debugger nicht. Anscheinend hat deiner da einen Mechanismus eingebaut, um überlange Laufzeiten von Eventhandlern abzufangen, weil dadurch der Browser blockiert wird. Allerdings müsste es dann einen Weg geben, um das beim Debuggen auszuschalten, denn da ist es ja normal, dass man eine ganze Zeit lang am Haltepunkt steht.

    Welchen Broser benutzt Du?

    Gut, dass Du dieses GIF angehängt hast, daran erkennt man nämlich, dass das ein Missverständnis ist und das Verhalten normal. Es geht ja um diesen Code:

    Ich habe wieder Kommentare hinein geschrieben, nur am Anfang und am Ende, dazwischen wollte ich nicht löschen, um mit den Klammern nicht durcheinander zu kommen.