Globale Variable mit onclick

  • Hallo


    Ich bin ein Javascript-Anfänger. Für folgendes Problem finde ich einfach keine Lösung.


    Wenn ein Button angewählt wird, soll unter anderem eine globale Variable übergeben werden . Der Button wird wie folgt aufgerufen.


    <input type=button value= Auto onClick=restart(startpost)>


    Ich brauche diese Variable für if-Verzweigungen im Script. Variablen in einer Funktion kann ich ja ausserhalb nicht verwenden.

    Für Hinweise bin ich sehr dankbar.


    Gruss langi

  • Meinst du das so?

  • Danke für den Tipp.


    Nein, ich befürchte, wir sprechen nicht vom Gleichen.


    Ich habe den Button wie folgt eingebunden:


    <input type=button value= Auto onClick=restart(startpost);auto()>


    Sobald der Button angeklickt wird, brauche ich eine globale Variable, die ich irgendwo im Script mehrer Male verwenden kann:


    Ich probierte mit: a=0;function auto() {a=1;}


    Das geht ja aber nicht, weil die Variable a ausserhalb der Funktion nicht zur Verfügung steht.

  • Ich verstehe leider deine Frage nicht ganz:

    Zitat

    Wenn ein Button angewählt wird, soll unter anderem eine globale Variable übergeben werden .

    ...

    Sobald der Button angeklickt wird, brauche ich eine globale Variable, die ich irgendwo im Script mehrer Male verwenden kann:

    Ich probierte mit: a=0;function auto() {a=1;}

    Willst Du innerhalb der Funktion eine globale Variable verändern? Das funktioniert schon, wenn Du sie zuvor global definiert hast. Versuche dies:

    JavaScript
    1. let a = 0; // globale Variable definieren
    2. function auto() {
    3. a = 1; // globale Variable verändern
    4. }
    5. auto();
    6. console.log(a);
  • Du solltest aber auch versuchen dies

    Code
    1. <input type=button value= Auto onClick=restart(startpost);auto()>

    nicht zu benutzen.

    Benutze wenn möglich dafür addEventListener.

    Deine Schreibweise ,alles ohne " zu schreiben ist wohl erlaubt , aber auch unübersichtlich und meiner Meinung nach auch Fehleranfälliger.

  • Was das addEventListener betrifft, so trifft auf dieses ebenfalls zu: Die Forderung, es der inline-Notation vorzuziehen, lese ich ständig, aber keine plausible und stichhaltige Begründung dafür.

  • Ich schmeiß mal etwas Lesestoff im Raum.

    https://stackoverflow.com/ques…deventlistener-vs-onclick


    Ich finde addeventlistener aber übersichtlicher und einfacher.

    Wenn man Zb 100 Buttons hat und 100 mal onclick ins HTML schreiben muss , findet man da bestimmt kaum durch.

    Gerade dann wenn man 100 verschiedene Funktionen hat .

    Je nach Code und vorhaben könnte man da vieleicht auch queryselectorAll benutzen und mit Schleife die Funktionen erstellen.

    Das sollte dann wahrscheinlich nee menge Code sparen.


    Ein Urteil soll sich jeder selber machen.

  • schau dir mal diese Funktion an:

    window.onLoad()


    damit kannst du praktisch festsetzen welche Funktionen du anwählst.

    Steht im Buch "Schrödinger lernt CSS, HTML, JS" .

    Vielleicht hilft dir das!

    LG triceps

  • @Sempervivum

    JavaScript
    1. let a = 0; // globale Variable definieren
    2. function auto() {
    3. a = 1; // globale Variable verändern
    4. }
    5. auto();
    6. console.log(a);

    Mit deinem Vorschlag erhalte ich als Varaible immer 1 - unabhängig des Buttons.


    Betr. addeventlistener und window.onLoad() bin ich noch nicht zum Ziel gekommen.

  • Das war auch nur als Demo gedacht, dass Du eine globale Variable aus einer Funktion heraus verändern kannst. Versuche dies mit einem Button:

    Code
    1. <button type="button" onclick="auto();">Klick!</button>
    2. <script>
    3. let a = 0; // globale Variable definieren
    4. function auto() {
    5. a++; // globale Variable verändern
    6. console.log(a);
    7. }
    8. </script>
  • Versuche dies mit einem Button:

    JavaScript
    1. <button type="button" onclick="auto();">Klick!</button>
    2. <script>
    3. let a = 0; // globale Variable definieren
    4. a++; // globale Variable verändern
    5. console.log(a);
    6. }
    7. </script>

    Das erzeugt nur eine Variable innerhalb der Funktion und ist nicht global.

  • Das behauptest du aber das trifft nicht zu :-) Außerdem hast du meinen Code falsch wieder gegeben.

    Versuche dies, dann erkennst Du, dass die globale Variable durch die Funktion auto verändert wird:

  • Das behauptest du aber das trifft nicht zu

    Sorry, ich bleibe dabei :-)


    Die globale Variable a bleibt beim Click auf den Button bei 0. Innerhalb der function auto() ändert sie auf 1, ausserhalb bleibt sie bei 0.

  • Ohr.
    Das ist aber selten.
    Du hast es geschafft, dass einer der geduldigsten Menschen hier kurz vorm Aufgeben ist.
    Ich habe mal den Code hier reinkopiert
    https://basti1012.bplaced.net/…rdner=html-seminar&id=440
    außerhalb der Funktion wird die globale Variable alle 100Millisekunden aktualisiert, dann siehst du es auch das beim klick auf den Button, die Variable auch außerhalb der Funktion sich ändert.
    Mal eine Frage.
    Wie gut kennst du dich überhaupt mit JS und der Konsole aus?
    Ich hatte schon mal ein der nicht müsste, was die Konsole ist, der hat nicht gepeilt das die Änderungen in der Konsole stehen.
    Der sagte auch immer das es nicht geht und ich kam mir ver... vor.
    Wie auch immer, in den PEN siehst du die Ausgabe ohne Konsole.
    Wenn du immer noch nicht weiter kommst dann.


    Du hast ja auch nirgend wo deinen kompletten Code gezeigt, damit man herausfinden könnte, was Du falsch machst.


    Dann können wir es vielleicht besser verstehen, falls du irgendwas anders machst als wie hier beschrieben.
    Ich glaube auch mittlerweile das du uns wichtigen Code verheimlichst, mit dem Code, den du gepostet hast, hat Sempervivum dir schon alles gesagt.

    Bitte ganzen Code posten, oder Beispiel zeigen den wir dann nachvollziehen können, wo die Unreinheiten wegkommen

    Dieser Beitrag wurde bereits 5 Mal editiert, zuletzt von basti1012 ()

  • Du hast es geschafft das einer der geduldigsten Menschen hier kurz vorm Aufgeben ist.

    Das tut mir aber leid, wollte ich natürlich nicht. Wie ich ja bei meiner Frage erwähnte bin ich JS-Anfänger.


    Nun zum Thema. Mein Problem ist wahrscheinlich tatsächlich das Thema Konsole.

    Ich brauche ja die Variable für if-Verzweigungen und da kriege ich die Kurve nicht.


    Mein Beispiel-Code sieht so aus:

    Ich hoffe, dass mein Problem damit nun sichtbar wird. :/

  • Zitat

    Ich hoffe, dass mein Problem damit nun sichtbar wird.

    Richtig, wenn man den Code vor sich sieht, ist sofort klar, warum das nicht funktioniert:

    Die Funktion auto, die die Variable a auf 1 setzt, wird erst aufgerufen, wenn jemand den Button klickt. Der Code mit dem if (a==1){wird dagegen sofort beim Laden der Seite ausgeführt. Zu dem Zeitpunkt ist die Variable jedoch noch nicht 1.

    Um eine Korrektur zu finden, müsste man wissen, welches Ziel Du mit dem Code verfolgst. Beschreibe das doch mal.

  • Das Ziel ist, dass solange der Button nicht geklickt wird soll im Beispiel setTimeout('restart(),300);aktiviert werden. Sobald jemand den Button anklickt, muss die Funktion xy aktiv werden.

  • Mal sehen, ob ich das richtig verstehe:

    Wenn der Button nicht gedrückt wird, soll nach 300 s die Funktion restart aufgerufen werden.

    Wird innerhalb der 300 s der Button gedrückt, soll die Funktion xy aufgerufen werden und die Funktion restart nicht mehr aufgerufen werden?

  • Die Funktion xy muss immer aufgerufen werden sobald der der Button geklickt wird, nicht nur innerhalb der 300ms.