Joachim Fröhlich: onclick klappt nicht

Guten Morgen, der Versuch, mit diesem Code

<button type="button" id ="Loesung1" 
onclick="href='https://www.matheaufgaben-loesen.de/Dreisatz/Dreisatz_Aufgabe1.pdf'" 
style="position: absolute;top: 250px;left:75%">
  Lösung1
</button>

die angegebene Seite zu öffnen, misslingt.

Weiss jemand, woran es liegt?

Freundliche Grüße Joachim

  1. Servus!

    Guten Morgen, der Versuch, mit diesem Code

    <button type="button" id ="Loesung1" 
    onclick="href='https://www.matheaufgaben-loesen.de/Dreisatz/Dreisatz_Aufgabe1.pdf'" 
    style="position: absolute;top: 250px;left:75%">
      Lösung1
    </button>
    

    die angegebene Seite zu öffnen, misslingt.

    Der Wert des onclick-Attribut müsste gültiges JavaScript sein.

    Eine Seite öffnet man aber auch nicht mit einem button, sondern mit einem Link.

    Herzliche Grüße

    Matthias Scharwies

    1. Guten Morgen Matthias, was meinst Du mit gültiges Javascript? Gruß Joachim

      1. Hallo,

        was meinst Du mit gültiges Javascript?

        was Matthias sagen wollte: Der Wert des onclick-Attributs in deinem Beispiel ist wohl gültiges Javascript. Aber ein button hat von Haus aus keine href-Eigenschaft, weil er gar nicht dafür gedacht ist, auf eine andere Seite zu leiten.

        Was du willst, ist ein Link. Der braucht dann auch gar nicht erst einen Eventhandler, weil er die Funktionalität von Geburt an mitbringt.

        Einen schönen Tag noch
         Martin

        --
        Manchmal kann man gar nicht so viel fühlen, wie man denkt.
        Und manchmal fühlt man so viel, dass man gar nicht denken kann.
        1. @@Der Martin

          was Matthias sagen wollte: Der Wert des onclick-Attributs in deinem Beispiel ist wohl gültiges Javascript. Aber ein button hat von Haus aus keine href-Eigenschaft, weil er gar nicht dafür gedacht ist, auf eine andere Seite zu leiten.

          Beim Button wird auch gar keine href-Eigenschaft gesetzt; im Code steht ja nicht this.href = "…". Ohne Angabe eines anderen Objekts bezieht sich href aufs window-Objekt.

          Was allerdings auch keine href-Eigenschaft hat, wohl aber eine location-Eigenschaft, die wiederum eine href-Eigenschaft hat.

          Aber damit sollte man hier nicht rumfummeln, sondern wie du sagtest:

          Was du willst, ist ein Link.

          Jolan tru

          --
          Wenn der Faschismus wiederkehrt, wird er nicht sagen „Hallo, ich bin der Faschismus.“ Er wird sagen: „Ich suche in diesem Deutschen Bundestag keine anderen Mehrheiten als die in der demokratischen Mitte. Wenn es heute eine solche Mehrheit gegeben hat, bedauere ich das.“ (Friedrich Merz)
      2. Servus!

        Guten Morgen Matthias, was meinst Du mit gültiges Javascript?


        Ich hatte hier in diesem Post schon auf ein Tutorial verwiesen:

        Dieses Tutorial zeigt, wie man in JavaScript Zahlenspiele programmiert. Grundlage ist eine Webseite mit einem Formular. Das Script liefert eine Aufgabe, verarbeitet eine Benutzereingabe und gibt eine Rückmeldung aus.


        Du kannst nicht einfach ein href reinschreiben und hoffen, dass dann etwas passiert.

        <button onclick="window.open('https://example.com', '_blank')">
        Öffne PDF
        </button>
        

        Das Beispiel ist nicht gut und sollte nicht verwendet werden.

        Bitte studiere ein paar Tutorials, z. B. das oben erwähnte und

        JavaScript und das DOM

        Eine Seite öffnen geht mit HTML ohne JavaScript!

        <p>Öffne diese Seite: 
           <a href="https://example.com" target="_blank">https://example.com</a>
        </p>
        

        Für eine Dialogbox hat dir Rolf schon einen Link gegeben.

        Herzliche Grüße

        Matthias Scharwies

        1. Lieber Matthias, wenn der Benutzer auf Lösung klickt, soll die angegebene Seite aufgerufen werden. Setze ich window.location vor das href, wird sie nach dem Klick auf Lösung zwar aufgerufen, man kehrt nach dem Schließen dieses Fensters aber nicht auf die Aufrufseite zurück, wie es sein sollte. Gruß Joachim

          1. Hallo Joachim,

            wenn der Benutzer auf Lösung klickt, soll die angegebene Seite aufgerufen werden.

            Da sitzt Dein Denkfehler: Du willst eine Information über das Ergebnis anzeigen, dann aber eine neue Aufgabe stellen / mit dem Quiz weitermachen.
            Das hast du (auch für dich selbst!) nicht mitformuliert und ist so auch mit Deiner Lösung nicht möglich, weil das PDF ja im neuen Tab ist.

            Mit JavaScript kannst du nicht von Tab zu Tab wechseln, sonst könnte man ja vom SELF-Forum aus auf dein Online-Banking im Nachbar-Tab zugreifen..

            Setze ich window.location vor das href, wird sie nach dem Klick auf Lösung zwar aufgerufen, man kehrt nach dem Schließen dieses Fensters aber nicht auf die Aufrufseite zurück, wie es sein sollte.

            Deshalb solltest du in deinem Tab (=Quiz) bleiben und nichts externes aufrufen. Theoretisch könntest du auf Button-Click einen iframe im gleichen Tab öffnen, der das PDF anzeigt.

            Praktisch würde ich das im Quiz mnachen. Erwartest du, dass Nutzer den mehrschrittigen Lösungsweg im Kopf rechnen und dann die Endsumme in dein Quiz eingeben?

            Du müsstest das Ganze konzeptionell noch mal anpassen.

            Herzliche Grüße

            Matthias Scharwies

            1. Lieber Matthias, danke für Deine Antwort. Zu meiner Intention: Eigentlich existiert das Programm schon, geschrieben in VB, dessen exe.Dateien nicht auf einem Handy laufen. Deshalb will ich versuchen, diese Dateien in javascript umzuschreiben, habe den Aufwand allerdings unterschätzt, will aber noch nicht aufgeben. Gruß Joachim

              1. Hallo Joachim,

                das ist ein Problem, das viele haben. Die Bedienphilosophie von Fat Client und Web Client ist unterschiedlich, und jeder, der versucht, Fat Client Bedienung im Browser zu erwarten, hat schweres Gelände vor sich. Mit einem JavaScript-Kettenfahrzeug kann man einiges überwinden, aber es gibt eben auch Grenzen dessen, was der Browser zulässt. Und das Kettenfahrzeug braucht erstmal einiges an Übung, um sich fahren zu lassen.

                Rolf

                --
                sumpsi - posui - obstruxi
              2. @@Joachim

                Deshalb will ich versuchen, diese Dateien in javascript umzuschreiben,

                Warum, wenn JavaScript das falsche Mittel zum Zweck ist?

                Jolan tru

                --
                Wenn der Faschismus wiederkehrt, wird er nicht sagen „Hallo, ich bin der Faschismus.“ Er wird sagen: „Ich suche in diesem Deutschen Bundestag keine anderen Mehrheiten als die in der demokratischen Mitte. Wenn es heute eine solche Mehrheit gegeben hat, bedauere ich das.“ (Friedrich Merz)
  2. Lieber Joachim,

    onclick="href='https://www.matheaufgaben-loesen.de/Dreisatz/Dreisatz_Aufgabe1.pdf'"

    Deine PDF-Datei ist von ihrer visuellen Darstellung nicht sehr hilfreich. Dazu kommt, dass eine PDF-Datei für Deine Zwecke hier maximal umständlich ist. Das bedeutet, dass der von Dir verfolgte Lösungsansatz wirklich keine gute Idee ist. Eine bessere Idee wäre es, die Lösung zum Aufklappen auf der Seite selbst zu haben. Für aufklappbare Inhalte gibt es das <details>-Element.

    Liebe Grüße

    Felix Riesterer

    1. @@Felix Riesterer

      onclick="href='https://www.matheaufgaben-loesen.de/Dreisatz/Dreisatz_Aufgabe1.pdf'"

      Deine PDF-Datei ist von ihrer visuellen Darstellung nicht sehr hilfreich. Dazu kommt,

      … dass sie fehlerhaft ist. 546 × 76 / 60 sind niemals 691,60 €, sondern 691,60.

      Entweder man rechnet überall mit Einheiten: 546 € × 76 d / 60 d = 691,60 €.

      Oder man rechnet überall ohne, dann bekommt man aber auch eine Zahl ohne Einheit raus.

      Jolan tru

      --
      Wenn der Faschismus wiederkehrt, wird er nicht sagen „Hallo, ich bin der Faschismus.“ Er wird sagen: „Ich suche in diesem Deutschen Bundestag keine anderen Mehrheiten als die in der demokratischen Mitte. Wenn es heute eine solche Mehrheit gegeben hat, bedauere ich das.“ (Friedrich Merz)
      1. Hi,

        Deine PDF-Datei ist von ihrer visuellen Darstellung nicht sehr hilfreich. Dazu kommt,

        … dass sie fehlerhaft ist. 546 × 76 / 60 sind niemals 691,60 €, sondern 691,60.

        Ich find's auch ungünstig, daß das Ergebnis der Rechnung dann in Rot (mit der Farbe, die von Lehrern üblicherweise für die Markierung der fehlerhaften Stellen benutzt wird)

        und: welcher Schüler macht schon einen Job, bei dem er nicht mal 10 Euro am Tag bekommt? Wär das nicht sogar ein Verstoß gegen die Mindestlohnregelungen?

        cu,
        Andreas a/k/a MudGuard

    2. @@Felix Riesterer

      Für aufklappbare Inhalte gibt es das <details>-Element.

      Wobei darin auch Iframes sein können. Dann sollte man aber loading="lazy" setzen, damit nicht alle PDFs gleich geladen werden, sondern nur dann, wenn die Nutzerin[1] auch eins sehen will, d.h. wenn details aufgeklappt wird.

      Jolan tru

      --
      Wenn der Faschismus wiederkehrt, wird er nicht sagen „Hallo, ich bin der Faschismus.“ Er wird sagen: „Ich suche in diesem Deutschen Bundestag keine anderen Mehrheiten als die in der demokratischen Mitte. Wenn es heute eine solche Mehrheit gegeben hat, bedauere ich das.“ (Friedrich Merz)

      1. generisches Femininum, männliche Nutzerinnen sind mitgemeint ↩︎

      1. An alle, bedanke mich für Eure hilfreichen Beiträge, mache mich an die Umsetzung. Gruß Joachim