romero: document.getElementById( "..." ).onclick richtig anwenden

hallo ich bins wieder,leider ;)

ich besitze eine init()-function welche viele verschiedene funktionen besitzt.logisch.

nun habe ich aber ein problem.ich will mit diesem ausdruck document.getElementById( "dazugehörige_id" ).onclick eine funktion aufrufen,wo ich 2 auswahllisten mittels einem button ausgeben möchte.

wenn ich sie mir nur anzeigen lasse,klappt es auch.aber wie schreibe ich sie in ein array()?

		function init_Zusatzmatten()  
		{  
			AuswahlForZusatz( out_zusatz, list_zusatz );  
  
			document.getElementById( "ZusatzmatteAuswahl" ).onclick = Function( "ZusatzmatteAuswählen()" );  
		};

in der function auswahlforzusatz() wird mittels document.getelementbyid().innerhtml=... 2 neue auswahllisten erstellt,ebenso den button für die funktion zusatzmatteauswählen()

ich will also nun,dass ich nachdem erstellen der auswahllisten mittels einem button diese ausgewählten felder(daten) in eine neue variable schreibe.

wenn ich in der function zusatzmatteauswählen, eine variable mittels concat zusammenkette und vorher sie so definiere var infile = new array() passiert da nix, da ja die var infile ja jedesmal neu definiert wird.

wie also sage in der function init() das durch das drücken des buttons,eine variable als new array übergeben wird?

ich hoffe ihr konntet nun meinen sprüngen folgen.

ps:mein script ist eine *.hta-datei und liegt lokal aufm pc.

lg romero

  1. Hallo,

    ich besitze eine init()-function welche viele verschiedene funktionen besitzt.logisch.

    eine Funktion, die verschiedene Funktionen besitzt? Nein, nicht logisch.

    AuswahlForZusatz( out_zusatz, list_zusatz );

    Schöner Deutsch/Englisch-Mix. *schüttel*

    document.getElementById( "ZusatzmatteAuswahl" ).onclick = Function( "ZusatzmatteAuswählen()" );

    Brauchst du die umständliche Kapselung in eine zusätzliche anonyme Funktion hier? Wenn ja, warum definierst du diese Funktion über einen String?
    Vermutlich ist aber

    document.getElementById( "ZusatzmatteAuswahl" ).onclick = ZusatzmatteAuswählen;

    bereits das, was du an dieser Stelle meinst, auch wenn's von hinten durch die Brust ins Knie natürlich auch geht.

    ich hoffe ihr konntet nun meinen sprüngen folgen.

    Nein, ehrlich gesagt, ich habe nichts von dem verstanden, was du eigentlich willst.
    Erklären ist anscheinend nicht deine starke Seite.

    ps:mein script ist eine *.hta-datei und liegt lokal aufm pc.

    Gut dass du's diesmal direkt dazuschreibst. :-)

    Ciao,
     Martin

    --
    Solange der Nagellack nicht trocken ist,
    ist eine Frau praktisch wehrlos.
      (Burt Reynolds, US-Schauspieler)
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hallo,

      ich besitze eine init()-function welche viele verschiedene funktionen besitzt.logisch.

      eine Funktion, die verschiedene Funktionen besitzt? Nein, nicht logisch.

      meine init-funktion soll ja alles initieren, oder sehe ich das nun falsch?

      ich hoffe ihr konntet nun meinen sprüngen folgen.

      Nein, ehrlich gesagt, ich habe nichts von dem verstanden, was du eigentlich willst.
      Erklären ist anscheinend nicht deine starke Seite.

      ok dann probier ich es nochmal.

      in meiner init-funktion gibt es eine weitere funktion ( auswahlforzusatz() ), wo ich mittels for-schleifen und if's/else's 2 neue verkettete auswahllisten erstellt habe.dieses datenobjekt habe ich in eine datei gespeichert und sie nach dem erstellen der select-felder aufgerufen.

      nun habe ich in meiner function auswahlforzusatz(), an der stelle wo ich die select-felder mittels document.getelementbyid(...) erstellt habe, einen button eingefügt.

      dieser button soll ermöglichen,das ich die felder,welche ich ausgewählt habe in ein array() gespeichert werden,damit ich die daten weiter verwenden kann.

      wenn ich sie mir nur anzeigen lasse,quasi über:

      var Zusatz_HTZ = document.Auswahl.Zusatz.options[document.Auswahl.Zusatz.selectedIndex].text;  
      var Zusatz_Variante = document.Auswahl.Zu
      ~~~satzvariante.options[document.Auswahl.ZusatzVariante.selectedIndex].text;  
        
      und:  
        
      `msg( Zusatz_HTZ + "_" + Zusatz_Variante + " / " );`{:.language-javascript} // function zur anzeige  
        
      dann zeigt er es mir auch auf dem bildschirm an.  
        
      aber wie schreibe ich die "gezeigten" daten in einen array()?  
        
      ich hoffe jetzt war's besser  
        
      lg romero
      
      1. Hi,

        ich besitze eine init()-function welche viele verschiedene funktionen besitzt.logisch.

        eine Funktion, die verschiedene Funktionen besitzt? Nein, nicht logisch.

        meine init-funktion soll ja alles initieren, oder sehe ich das nun falsch?

        Dann soll sie also nur verschiedene Funktionen/Methoden _aufrufen_?
        Ja, dann siehst du das falsch, denn aufrufen hat nichts mit „besitzen“ zu tun.

        aber wie schreibe ich die "gezeigten" daten in einen array()?

        Ist jetzt das Grundlagenwissen über den Umgang mit Arrays dein eigentliches Problem?
        Wenn ja, dann war deine Problembeschreibung mal wieder ermüdend viel Geschwafel für so eine simple Frage. Wenn du Grundsatz-/Grundlagen-Fragen hast - dann stelle sie bitte zunächst losgelöst von deinem konkreten Projekt. Wähle simplere Beispiele zur Verdeutlichung des Sachverhaltes und des Problems - dann musst du weniger weit ausholen, und wir uns weniger tief in deinen Schaudercode reindenken.

        Wie man mit Arrays umgeht, kannst du in SELFHTML nachlesen.
        Auch zum Einfügen von neuen Elementen in ein Array findest du dort Methoden genannt - und in der Erklärung dazu teilweise sogar noch einfachere Vorgehensweisen.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. @chrisb

          der umgang mit arrays ist nicht mein problem,jedenfalls nicht direkt.

          die sache ist nur die,dass wenn ich den button das erste mal drücke,soll infile (als array) mit der allerersten auswahl befüllt werden.bei der 2. selektierung soll die 2. auswahl an die 1. angehangen werden.

          wenn ich also folgenden code angebe

          var infile = new Array( Zusatz_HTZ + "_" + Zusatz_Variante );  
            
          var infile_Zusatz = infile.concat( Zusatz_HTZ + "_" + Zusatz_Variante );
          

          wird infile aus den beiden auswahlmöglickeiten gebildet.die infile_zusatz soll dann das array() sein, wo alle daten gesammelt werden.nur dabei wird nach jedem drücken, diese variable ja jedesmal überschrieben,nicht angehangen.

          wenn ich aber es so schreibe

          var infile_Zusatz = infile_Zusatz.concat( Zusatz_HTZ + "_" + Zusatz_Variante );

          dann ist für ihn infile_zusatz halt 'undefined'. habs ja vorher zwar nirgens definiert,aber wenn ich es mache (in dieser funktion wo diese zeilen halt stehen) dann wird ja jedes mal diese infile_zusatz halt neu definiert,was ja nicht sein soll.

          ich will, das diese var infile_zusatz halt das erste mal null oder leer ist,aber nach den drücken des buttons befüllt wird.nicht jedesmal neu sondern halt aneinander.

          ich hoffe jetzt war's n bissl klarer, was ich möchte.

          lg romero

          1. Hi,

            wenn ich aber es so schreibe

            var infile_Zusatz = infile_Zusatz.concat( Zusatz_HTZ + "_" + Zusatz_Variante );

            dann ist für ihn infile_zusatz halt 'undefined'. habs ja vorher zwar nirgens definiert,

            D'oh!

            aber wenn ich es mache (in dieser funktion wo diese zeilen halt stehen) dann wird ja jedes mal diese infile_zusatz halt neu definiert,was ja nicht sein soll.

            Code?

            ich will, das diese var infile_zusatz halt das erste mal null oder leer ist,aber nach den drücken des buttons befüllt wird.nicht jedesmal neu sondern halt aneinander.

            Dann intialisiere diese Variable vorher einmal als leeres Array, und füge beim Klick einen neuen Eintrag hinzu.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. ich will, das diese var infile_zusatz halt das erste mal null oder leer ist,aber nach den drücken des buttons befüllt wird.nicht jedesmal neu sondern halt aneinander.

              Dann intialisiere diese Variable vorher einmal als leeres Array, und füge beim Klick einen neuen Eintrag hinzu.

              MfG ChrisB

              sorry aber bin jetzt bisschen überfragt.leeres array in meine init().den neuen eintrag hinzu,in die function,welche beim klick aufgerufen wird?oder direkt hier?

              document.getElementById( "ZusatzmatteAuswahl" ).onclick = ZusatzmatteAuswählen;

              wenn ja,wie siehts denn dann aus?

              lg romero

              1. kann mir denn keiner einen tipp geben wie ich es machen kann?

                1. kann mir denn keiner einen tipp geben wie ich es machen kann?

                  Ich verstehe deine Frage nicht.

                  Struppi.

                  1. kann mir denn keiner einen tipp geben wie ich es machen kann?

                    Ich verstehe deine Frage nicht.

                    Struppi.

                    na wie ich in meiner init() mittels diesem aufruf:

                    function init()  
                    {  
                    var infile = new Array();  
                      
                    document.getElementById( "ZusatzmatteAuswahl" ).onclick = ZusatzmatteAuswählen;  
                      
                    function ZusatzmatteAuswählen( infile )  
                    {  
                    var Zusatz_HTZ = document.Auswahl.Zusatz.options[document.Auswahl.Zusatz.selectedIndex].text;  
                    var Zusatz_Variante = document.Auswahl.ZusatzVariante.options[document.Auswahl.ZusatzVariante.selectedIndex].text;  
                      
                    infile = infile.concat( Zusatz_HTZ + "_" + Zusatz_Variante );  
                      
                    msg( infile );  
                      
                    return infile;  
                    }
                    

                    die variable infile so übernehmen kann, dass in der function ZusatzmatteAuswählen() selektierte auswahllisten als array "gespeichert" werden.und ich die "gefüllte" infile als array weiter verwenden kann.

                    denn es soll durch drücken eines buttons die jeweils selektieren 2 auswahllisten in eine variable übernommen werden.

                    das anzeigen der jeweils selektieren AL klappt ja,nur das "speichern" in ein array nicht. denke so wie es chrisB beschrieb,scheint es zu klappen.weiß aber nicht wie ich diesen eintrag per klick hinzufüge.

                    lg romero

                    1. Struppi.

                      Du musst nicht alles zitieren, es reicht das, worauf du antwortest.

                      na wie ich in meiner init() mittels diesem aufruf:

                      var infile = new Array();

                      document.getElementById( "ZusatzmatteAuswahl" ).onclick = ZusatzmatteAuswählen;

                      function ZusatzmatteAuswählen( infile )

                      In dem Fall musst du den Event mit einem closure aufrufen, damit du den Parameter übergeben kannst.

                      Struppi.

                      1. genau das ist es.vielen vielen dank.

                        lg romero

                      2. hier die lösung:

                        function init_Zusatzmatten()  
                        {  
                          
                        var infile = new Array();  
                          
                        var ZusatzmatteAuswählen = function()  
                        {  
                          
                        var Zusatz_HTZ = document.Auswahl.Zusatz.options[document.Auswahl.Zusatz.selectedIndex].text;  
                        var Zusatz_Variante = document.Auswahl.ZusatzVariante.options[document.Auswahl.ZusatzVariante.selectedIndex].text;  
                          
                        infile = infile.concat( Zusatz_HTZ + "_" + Zusatz_Variante );  
                          
                        msg( infile + "<br>" );  
                          
                        }  
                          
                        document.getElementById( "ZusatzmatteAuswahl" ).onclick = ZusatzmatteAuswählen;  
                          
                        };