Beiträge von Sempervivum

    PS: Das geht auch ohne jQuery, man kann das unter einem window.onclick zusammen fassen:

    Zitat

    Deine Änderungshinweise habe ich auch umgesetzt. eaneingabe.php, film.php, liste.php und filmerstellen.php sind raus geflogen und der Code aus diesen wurde direkt in index.php geschrieben. Außerdem habe ich mir auf deinen Hinweis hin meine anderen Dateien nochmal vorgenommen und auch da einiges raus geschmissen.

    Das liest sich ja sehr gut, dann müsste das im Vergleich zum Anfang wesentlich überschaubarer sein.

    Ich habe mir dein ursprüngliches Problem mal angesehen und mir ist folgendes aufgefallen: In dem Code deiner index.php finden ich mehrmals dieses:

    window.onclick = function(event) {

    Dabei wird das onclick jeweils überschrieben, so dass nur das letzte wirksam bleibt. Prüfe, ob das die Ursache für dein Problem ist. Wenn ja, dann konsequent mit Eventbubbling arbeiten, so wie hier:

    $(document).on('click', '.entfernenbutton', function() {

    Zitat

    Ja, ich weiß, was er bewirkt, aber ich weiß nicht, warum. Oder anders gesagt: Ich kann diesen Code nicht mit ganz normalen Sätzen beschreiben.

    Ich habe den Code in der Funktion wieder kommentiert, ich hoffe, das trägt zum Verständnis bei:

    Zitat von failix

    kann mir nur nicht so richtig erklären, was die eckigen Klammern bedeuten.

    Das wird z. B. hier erklärt:

    https://developer.mozilla.org/de/docs/Web/Ja…l_Objects/Array

    Zitat von failix

    Kein guter Tag heute für mich. Einer von den Tagen, an denen man sich ganz klein und ahnungslos vorkommt und mächtigen Frust deswegen empfindet.

    Einer hat mir mal geraten: "Go slow for the beginning." Es ist ein bewährtes Verfahren, Schritt-für-Schritt vorzugehen und den zweiten Schritt nicht vor dem ersten zu tun. Insofern hat das Vorgehen deines Dozenten schon etwas für sich.

    Hallo Failix , dieses:

    Code
      if (numberWordMap[nr]) {
        return numberWordMap[nr];
      }

    soll den Fall abdecken, den Du in #11 angesprochen hast:

    Zitat

    Ab 13 soll keine Ersetzung mehr stattfinden. Mein Frage-Antwort-Objekt hat 13 Einträge, die 13 ist aber im Ersetzungsobjekt nicht definiert, also kommt es zum Ausgabefehler "undefined".

    Nur wenn ein Eintrag in der Liste mit den Wörtern existiert, wird die Funktion mit dem betr. Wort verlassen, wenn nicht, wird die Zahl zurück gegeben.

    Zitat

    Ich weiß nicht genau, wie ich in diesem Dropdown einfach Optionen anzeigen

    lassen kann, die selektiert und dann mit dem Formular übergeben werden können.

    Die Optionen hast Du ja schon. Damit die ausgewählte mit dem Formular übertragen wird, musst Du dem Select ein name-Attribut geben.

    Zitat

    wie fange ich in meinem Fall diese "3" dann so ab, dass aus "13" nicht "1drei" wird?

    In diesem Fall ist die Situation jetzt ein wenig anders: Nur ersetzen wenn keine Zeichen links und rechts sondern die 3 allein steht. Das geht dann so:

    '3'.replace(/^3$/g, 'drei')

    ^ steht dabei für den Anfang und $ für das Ende des Strings.

    Zitat

    1. Wofür stehen "$1" und "$2" beim Ersetzungsausdruck?

    Die werden durch die geklammerten Teilausdrücke in der Regex ersetzt, d. h. diese: ([^\d]) bzw. die Zeichen vor und hinter der 2.

    Wenn man diese nicht einbeziehen würde, würden die Zeichen links und rechts von der 2 verschwinden.

    2. Hier ('Es sind 3 Fragen.').str.replace(/([^\d])3([^\d])/g, '$1drei$2'); ist das str vor dem replace überflüssig, denn das geklammerte ist ja schon der String, in dem Du ersetzen willst.

    3. Dieses questions.length.toString() liefert einen Integer, d. h. einen reinen Zahlenwert. Die Regex prüft jedoch ob links und rechts davon ein Zeichen steht, das keine Ziffer ist und das ist ja bei der Länge bzw. einem Integer nicht der Fall.

    Zitat

    Wie macht man es korrekt, dass nur der exakte Ausdruck, in meinem Fall die Ziffer 2 zwischen den Hochkommas, ersetzt wird?

    Meinst Du, die 2 soll nur ersetzt werden, wenn sie allein innerhalb von Text ohne Ziffern steht? Dann müsste es so funktionieren:

    str.replace(/([^\d])2([^\d])/g, '$1zwei$2')

    Die 2 wird nur ersetzt, wenn das Zeichen davor und das Zeichen danach keine Ziffer ist.

    Ich gebe zu, dass ich nicht genau genug gelesen hatte: Dir geht es um die äußere nummerierte Liste.

    Offenbar ist es so, dass sich das Tag <strong> nicht auf die Zahlen auswirkt, wohl aber die CSS-Eigenschaft font-weight. Wenn ich die auf bold setze werden auch die Zahlen fett dargestellt:

    Code
            ol li {
                font-weight: bold;
            }

    Auf meinem Handy (Samsung A50 mit Samsung-Browser) tritt zwar keine Scrollbar auf, ich kann das Problem aber reproduzieren, indem ich im Desktop-Browser das Fenster schmaler ziehe. Und wenn ich die minimale Breite von 25em im CSS grid-template-columns: repeat(auto-fill, minmax(25em, 1fr)); erhöhe, taucht auch in meinem mobilen Browser die Scrollbar auf.

    Der Grund ist offensichtlich, dass die Griditems bei der minimalen Breite und der vertikalen Anordnung nicht mehr in den schmalen Bildschirm des Handy hinein passen, so dass der Browser eine Scrollbar einblendet.

    Abhilfe, indem Du mit einer Mediaquery die Breite dynamisch machst: grid-template-columns: 1fr; aber dann kann es passieren, dass deine Inhalte nicht mehr hinein passen. Um das zu beurteilen müsste man wissen wie die realen Inhalte aussehen.

    Zitat

    Richtig wäre es, ein uncheck anzuwenden, aber ich weiß (noch) nicht, wie ich das Element anspreche.

    Das checked bei dem Radiobutton wegnehmen kannst Du indem Du die Eigenschaft checked auf false setzt.

    Code
            function resetAnswer() {
                var x, z;
                x = document.querySelectorAll('#divAnswers input[type="radio"]');
                for (z = 0; z < x.length; z++) {
                    x[z].checked = false;
                }
            }

    Wenn Du gleich gezielt den Radiobutton selektierst, der gecheckt ist, brauchst Du gar keine Schleife mehr:

    Code
            function resetAnswer() {
                document.querySelector('#divAnswers input[type="radio"]:checked').checked = false;
            }

    (beides ungetestet)

    Ja, das kannst Du vereinfachen, indem Du die Elemente in einer Schleife bearbeitest:

    Ungetestet.

    Jetzt bin ich mir nicht sicher, ob das i von Zeitpunkt der Registrierung gilt oder wenn der Eventlistener feuert. Probiere es aus.