Insomnia: deaktiviertes layer,Scrollbalken bleibt sichtbar opera sichtbar

0 75

deaktiviertes layer,Scrollbalken bleibt sichtbar opera sichtbar

Insomnia
  • css
  1. 0
    Detlef G.
    1. 0
      Insomnia
      1. 0
        Detlef G.
        1. 0
          Insomnia
      2. 0
        Insomnia
        1. 0
          Detlef G.
          1. 0
            Insomnia
            1. 0
              Detlef G.
              1. 0
                Insomnia
                1. 0
                  Insomnia
                  1. 0
                    Insomnia
                    1. 0
                      Detlef G.
                      1. 0
                        Insomnia
                        1. 0
                          Insomnia
                          1. 0

                            Element ein-, ausblenden

                            Detlef G.
                            • javascript
                            1. 0
                              Insomnia
                              1. 0
                                Detlef G.
                                1. 0
                                  Insomnia
                                  1. 0
                                    Insomnia
                                    • css
                                  2. 0
                                    Detlef G.
                                    1. 0
                                      Insomnia
                                      1. 0
                                        Insomnia
                                      2. 0
                                        Detlef G.
                                        1. 0
                                          Detlef G.
                                          1. 0
                                            Insomnia
                                        2. 0
                                          Insomnia
                                          1. 0
                                            Detlef G.
                                            1. 0
                                              Insomnia
                                              1. 0
                                                Beat
                                                1. 0
                                                  Detlef G.
                                                2. 0
                                                  Insomnia
                                              2. 0
                                                Detlef G.
                                                1. 0
                                                  Insomnia
                                                  1. 0
                                                    Detlef G.
                                                    1. 0
                                                      Insomnia
                                                      1. 0
                                                        Detlef G.
                                                        • sonstiges
                                                        1. 0
                                                          Insomnia
                                                        2. 0
                                                          Insomnia
                                                        3. 0
                                                          Insomnia
                                                        4. 0
                                                          Insomnia
                                                          • javascript
                                                          1. 0
                                                            Kai345
                                                            1. 0
                                                              Kai345
                                                              1. 0
                                                                Insomnia
                                                                1. 0
                                                                  Kai345
                                                                2. 0
                                                                  Detlef G.
                                                                  1. 0
                                                                    Insomnia
                                                              2. 0
                                                                Detlef G.
                                                                1. 0
                                                                  Kai345
                                                                  1. 0
                                                                    Detlef G.
                                                                    1. 0
                                                                      Kai345
                                                                      1. 0
                                                                        Insomnia
                                                                        1. 0
                                                                          Insomnia
                                                                          1. 0
                                                                            Detlef G.
                                                                            1. 0
                                                                              Kai345
                                                                              1. 0
                                                                                Insomnia
                                                                                1. 0
                                                                                  Insomnia
                                                                                  1. 0
                                                                                    Insomnia
                                                                                    1. 0
                                                                                      Detlef G.
                                                                                      1. 0
                                                                                        Insomnia
                                                                              2. 0
                                                                                Detlef G.
                                                                                1. 0
                                                                                  Kai345
                                                                      2. 0
                                                                        Detlef G.
                                                                        1. 0
                                                                          Kai345
                                                                          1. 0
                                                                            Detlef G.
                                                                            1. 0
                                                                              Kai345
                                                      2. 0
                                                        Detlef G.
                                                        1. 0
                                                          Insomnia
                                                          1. 0
                                                            Detlef G.
                                                            1. 0
                                                              Insomnia
                                                              1. 0
                                                                Detlef G.
                                                                1. 0
                                                                  Insomnia
                                                                  1. 0
                                                                    Detlef G.
                                                                    1. 0
                                                                      Insomnia
                      2. 0
                        Insomnia

Hallo zusammen... wie das Thema schon sagt habe ich folgendes Problem.

Ich habe einen Layer das ganze schaut in der Seite vollkommen simpel wie folgt so aus.

<div id="infos"> Mein Text</div>

Das CSS steckt in einer ausgelagerten Datei und der entsprechende bereich darin schaut wie folgt aus...

  
  
#infos {  
 position:absolute;  
 width:480px;  
 height:320px;  
 z-index:5;  
 visibility: hidden;  
 top: 40px;  
 left: 80px;  
 font-family: Verdana, Arial, Helvetica, sans-serif;  
 font-size: 10px;  
 line-height: 18px;  
 color: #414141;  
 background-color: #FFFFFF;  
 border: 1px solid #333333;  
 padding: 30px;  
 overflow: auto;  
 text-align: center;  
  
}

Unter IE und Firefox ist alles wunderbar ausser bei Opera bleibt beim deaktivierte Layer der Scrollbalken einfach sichtbar... das heisst sämtlicher Inhalt des Layer ist nicht sichtbar, jedoch der Scrollbalken zeit sich von den Einstellungen unbeeindruckt… ich hab mir 2 tage den Wolf gesucht und wende mich nur Hilfe suchend an euch.

Lieben Gruss
Insomnia

  1. Hallo Insomnia

    Unter IE und Firefox ist alles wunderbar ausser bei Opera bleibt beim deaktivierte Layer der Scrollbalken einfach sichtbar... das heisst sämtlicher Inhalt des Layer ist nicht sichtbar, jedoch der Scrollbalken zeit sich von den Einstellungen unbeeindruckt…

    Passiert dies auch, wenn du zum Ausblenden nicht visibility sondern display verwendest?

    Auf Wiederlesen
    Detlef

    --
    - Wissen ist gut
    - Können ist besser
    - aber das Beste und Interessanteste ist der Weg dahin!
    1. Grüss dich Detlef,

      erstmal vielen danke für deine schnelle antwort...

      display würde natürlich wunderbar gehen um die Inhalte unsichtbar zu machen. Ob das Problem dann jedoch auch unter Opera auftritt müsste ich ausprobieren und auf die antwort eines Freundes warten der das Problem bemerkt hat.

      Was display jedoch nicht zum ersten mittel meiner Wahl gemacht hat ist das ich  den Layer gerne ein und ausblenden möchte da er schon auch Infos enthält die der user lesen können soll wenn er denn möchte.

      Daher erschien mir visibility der bessere weg.

      Werde deinen Vorschlag aber auf jedenfall ausprobieren vielleicht bringt er uns ja der Lösung näher.

      Grüsse
      Insomnia

      1. Hallo Insomnia

        Was display jedoch nicht zum ersten mittel meiner Wahl gemacht hat ist das ich  den Layer gerne ein und ausblenden möchte da er schon auch Infos enthält die der user lesen können soll wenn er denn möchte.

        Wie kann er sie bei visibility: hidden; lesen?

        Hast du keine Funktion, die sie wieder sichtbar macht?

        (Übrigens, wenn sie mittels Javascript sichtbar gemacht werden, dann sollten sie auch nur bei aktiviertem Javascript versteckt werden.)

        Auf Wiederlesen
        Detlef

        --
        - Wissen ist gut
        - Können ist besser
        - aber das Beste und Interessanteste ist der Weg dahin!
        1. Es ist wie du es gesagt hast, der Layer wird über ein Javascript sichtbar gemacht. Was aber sicher nicht ursächlich für das Problem ist das wir hier lösen wollen.

          Grüsse
          Insomnia

      2. Es ist wie du es gesagt hast, der Layer wird über ein Javascript sichtbar gemacht. Was aber sicher nicht ursächlich für das Problem ist das wir hier lösen wollen.

        Grüsse
        Insomnia

        1. Hallo Insomnia

          Es ist wie du es gesagt hast, der Layer wird über ein Javascript sichtbar gemacht.

          Genauso wie du den Wert für visibility mittel Javascript ändern kannst, kannst du auch den Wert für display ändern.

          Was aber sicher nicht ursächlich für das Problem ist das wir hier lösen wollen.

          Natürlich nicht.
          Der Unterschied zwischen visibility:hidden und display:none besteht darin, dass bei ersterem nur versteckt wird (bei deinem Problem im Opera wohl auch nur der Inhalt). Es bleibt aber praktisch vorhanden und reserviert weiter den Platz, den es benötigt. Das fällt bei dir nicht auf, weil es durch position:absolute vollständig aus dem Elementfluss herausgenommen ist.
          Bei display:none wird es nicht nur versteckt sondern überhaupt nicht angezeigt, so als wäre es überhaupt nicht vorhanden.

          Auf Wiederlesen
          Detlef

          --
          - Wissen ist gut
          - Können ist besser
          - aber das Beste und Interessanteste ist der Weg dahin!
          1. okay ich verstehe...

            Nun scripten ist nun nicht meine eigentliche Stärke… die liegt eher in der Gestaltung und bei 3D Studio Max.

            Könntest du mir in Bezug auf JavaScript noch auf die Sprünge helfen.

            Vielen dank!
            Insomnia

            1. Hallo Insomnia

              Könntest du mir in Bezug auf JavaScript noch auf die Sprünge helfen.

              Am besten wird sein, du postest dein bisheriges Einblendescript, damit wir das dann entsprechend anpassen können.

              Auf Wiederlesen
              Detlef

              --
              - Wissen ist gut
              - Können ist besser
              - aber das Beste und Interessanteste ist der Weg dahin!
              1. Hallo Detlef,

                ich wünsche dir einen schönen Sonntag Morgen.

                Das Script wurde über Dreamweaver generiert und müsste folgendes sein:

                function MM_showHideLayers() { //v6.0  
                  var i,p,v,obj,args=MM_showHideLayers.arguments;  
                  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];  
                    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }  
                    obj.visibility=v; }  
                } 
                

                Es ist wie das CSS auch in einer ausgelagerten Datei.

                Mir ist heute Nacht noch eine Sache durch den Kopf gegangen... wäre es nicht möglich den Zustand für den Scrollbalken durch eine ifabfrage direkt über CSS zu lösen. Also in dieser weise

                Der Layer hat den Zustand visibility: visible; der Zustand des Scrollbalken ist overflow: auto;

                if

                Der Layer hat den Zustand visibility: hidden; der Zustand des Scrollbalkens ist overflow: hidden;

                Der Vorteil wäre, ich müsste das nur in das bestehende CSS einfügen, bei der Lösung mit dem JavaScript müsste ich jeden Butten ändern, der mit dem Problemlayer zu tun hat, oder irre ich da.

                Sonnigen Gruss
                Insomnia

                1. Sorry bin heute morgen noch etwas verschlafen...

                  das müsste natürlich mit if else gelöst werden.

                  Ich hoffe du kannst mir noch folgen.

                  Insomnia

                  1. Hab nochmals das forum nach einer lösung durchforstet...

                    hab zwar keine gefunden aber bin auf das hier gestossen

                    http://de.selfhtml.org/css/eigenschaften/positionierung.htm@title=http://de.selfhtml.org/css/eigenschaften/positionierung.htm

                    offenbar ist mein problem nicht ganz unbekannt.

                    Grüsse
                    Insomnia

                    1. Hallo Insomnia,

                      du hast seit meiner letzten Antwort ja fleißig gepostet.

                      hab zwar keine gefunden aber bin auf das hier gestossen

                      http://de.selfhtml.org/css/eigenschaften/positionierung.htm@title=http://de.selfhtml.org/css/eigenschaften/positionierung.htm

                      Oh, du hast tatsächlich die Seite gefunden, die ich dir in meiner ersten Antwort zwei mal verlinkt habe.

                      Jetzt zu deinen anderen Postings:

                      ich wünsche dir einen schönen Sonntag Morgen.

                      Danke, dir auch (auch wenn es jetzt schon fast Abend ist)

                      Das Script wurde über Dreamweaver generiert und müsste folgendes sein:

                      function MM_showHideLayers() { //v6.0

                      Tut mir leid, in die Dreamweaver-Scripte möchte ich mich nicht zu sehr vertiefen. (Zitate: wahsaga, suit)

                      Hättest du in deinem Ausgangsposting etwas von Dreamweaver geschrieben, hätte ich es wohl gleich ausgeblendet, mit Sicherheit aber nicht geantwortet.

                      Mir ist heute Nacht noch eine Sache durch den Kopf gegangen... wäre es nicht möglich den Zustand für den Scrollbalken durch eine ifabfrage direkt über CSS zu lösen.

                      CSS ist keine Programmiersprache.
                      CSS kennt Eigenschaften und Werte, die beschreiben, wie die HTML-Elemente dargestellt werden sollen. CSS kennt keine Befehle und kann nicht rechnen (zumindest bis jetzt).

                      Der Vorteil wäre, ich müsste das nur in das bestehende CSS einfügen, bei der Lösung mit dem JavaScript müsste ich jeden Butten ändern, der mit dem Problemlayer zu tun hat, oder irre ich da.

                      Nein, nicht unbedingt, es muss nicht unbedingt der Aufruf der Funktion geändert werden, wenn die Funktion entsprechend geändert wäre.

                      Es gibt auch die Möglichkeiten den Elementen, mittels Javascript die Klasse der Elemente zu setzen bzw. zu ändern und die Eigenschaften im CSS dann für diese Klasse zu definieren oder direkt das CSS mittels Javascript zu ändern.
                      Für ein einfaches Ein- und Ausblenden eines oder weniger Elemente halte ich das allerdings für „mit Kanonen auf Spatzen geschossen”.

                      Wir kommen so also erstmal nicht weiter, deshalb: Wie viele von den supertollen MM_-Funktionen werden in der Seite noch verwendet?
                      Oder, kannst du die Seite online stellen, damit wir uns das alles mal komplett ansehen können?

                      Auf Wiederlesen
                      Detlef

                      --
                      - Wissen ist gut
                      - Können ist besser
                      - aber das Beste und Interessanteste ist der Weg dahin!
                      1. Hallo Detlef,

                        ich freu mich wieder von Dir zu lesen!

                        Oh, du hast tatsächlich die Seite gefunden, die ich dir in meiner ersten Antwort zwei mal verlinkt habe.

                        Nein, Nein ich hab mir den von dir empfohlenen Link angeschaut, jedoch nur den bereich der sich um display dreht, wem Rest hatte ich keine Aufmerksamkeit geschenkt.

                        Ich habe die Seite hauptsächlich mit der Unterstützung eines Buches geschrieben "HTML mit CSS & XHTML"  Dreamweaver hat mir im Grunde nur als Umgebung gedient.

                        Weiteres JavaScript, das auf die Divs zugreift um diese zu beeinflussen gibt es nicht… ein weiteres Script ist für den Bildwechsel im Menü zuständig, das war es dann aber auch.

                        Beide Scripts befinden sich in einer ausgelagerten Datei.

                        Ich hoffe du hilfst mir weiter…

                        Im Notfall würde ich auf overflow: scroll; zurückgreifen, womit ein kleiner teil der Opera user dann zwar keinen Scrollbalken hätten (wenn ich es recht verstanden habe), aber das wäre weniger schlimm als einen solchen Balken mitten im Layout.

                        Grüsse
                        Insomnia

                        1. So war etwas fleißig, hab jedoch keine Ahnung ob das nicht vielleicht vollkommener Schwachsinn ist was ich da habe…

                          Ziel war es das ungeliebte Dreamweaver - JavaScript zu ersetzen und das an/aus blenden des Layers auch gleich durch display zu ersetzen.

                          Der Link zum einblenden in meiner Seite wäre dann wie folgt:

                          <a href="#" onclick=" javascript:div_an ('info')">Tick Tack To</a>

                          Das ausgelagerte JavaScript würde dann hoffentlich so aussehen müssen:

                          function div_an () {  
                            document.getElementById ('info').style.display = 'block';  
                          }  
                          
                          

                          Zum ausblenden des Layers:

                          Der link:

                          a href="#" onclick=" javascript:div_aus ('info')">Tick Tack To</a>

                          Das JavaScript:

                          function div_aus () {  
                            document.getElementById ('info'). style.display = 'none';  
                          }  
                          
                          

                          Grüsse
                          Insomnia

                          1. Hallo Insomnia

                            So war etwas fleißig, hab jedoch keine Ahnung ob das nicht vielleicht vollkommener Schwachsinn ist was ich da habe…

                            Gut, dass ich nicht eher geantwortet habe. So hast du SELF eine Lösung gefunden.

                            Der Link zum einblenden in meiner Seite wäre dann wie folgt:

                            <a href="#" onclick=" javascript:div_an ('info')">Tick Tack To</a>

                            Das „javascript:” ist nicht nötig, weil onclick bereits ein Javascripteventhandler ist.
                            Zusätzlich kann mittels return false verhindert werden, dass die Seite dabei immer auf den Anfang springt.

                            <a href="#" onclick="[code lang=javascript]div_an ('info');return false">Tick Tack To</a>[/code]

                            Das ausgelagerte JavaScript würde dann hoffentlich so aussehen müssen:

                            function div_an () {

                            document.getElementById ('info').style.display = 'block';
                            }

                              
                            Fast richtig.  
                            Du übergibst beim Klick auf den Link die Id des Elements, das eingeblendet werden soll, die Funktion erwartet aber gar keinen Parameter.  
                            Besser so:  
                              
                            ~~~javascript
                            function div_an (myId) {  
                              document.getElementById (myId).style.display = 'block';  
                            }  
                            
                            

                            Jetzt wird genau das Element eingeblendet, dessen Id du an die Funktion übergeben hast.

                            Noch besser wäre es zur Sicherheit zu prüfen, ob der Browser document.getElementById überhaupt kennt und ob es ein Element mit der übergebenen Id auch gibt. (Laut deinem CSS-Schnipsel gibt es nur „infos”, nicht „info”.)
                            Das könnte dann so aussehen:

                            function div_an (myId) {  
                              if (document.getElementById) {              // kennt der Browser dies überhaupt  
                                var el = document.getElementById (myId);  // eine Referenz auf das Objekt (dein Div) holen und in el speichern  
                                if (el && el.style) {                     // hat das geklappt und kennt el style  
                                  el.style.display = 'block';             // dann display auf block setzen  
                                }  
                              }  
                            }  
                            
                            

                            Es ist etwas aufgeblähter geschrieben, als nötig, damit es übersichtlicher ist.

                            Zum ausblenden des Layers:

                            dann entsprechend.

                            Wenn du das kleine Script verstanden hast und es dich interessiert, dann könnten wir dies noch so erweitern, dass nur eine Funktion beides erledigt und du beim Aufruf der Funktion festlegen kannst, ob das Element aus- oder eingeblendet werden soll, oder ob ein Link bei jedem Klick abwechselnd ein- und ausblenden soll.

                            Auf Wiederlesen
                            Detlef

                            --
                            - Wissen ist gut
                            - Können ist besser
                            - aber das Beste und Interessanteste ist der Weg dahin!
                            1. Okay zum Link... dann schauen wir mal ob ich das soweit richtig verstanden habe.

                              onclick reicht da es ohnehin schon als JavaSript verstanden wir.

                              return false ist so was wie eine Sicherung gegen eine Schleife, soll heißen dass das ganze nach dem Ausführen über onclick nicht wieder in den Ursprung zurück springen kann… oder?

                              Wenn meine Ausführungen richtig sind hab ich das mit dem link verstanden.

                              Nun wird es für mich schwierig:

                              Das Div heißt ja #infos

                              Das heißt der Benutzer klickt auf den butten der hat den befehlsteil onclick="div_an ('infos')

                              Das reicht dann der funktion div_an um den Namen des Divs und zwar 'infos' als (myId) zu verstehen und somit muss ich 'infos' nicht extra in die Funktion eintragen… hab ich das im Ansatz so richtig verstanden?

                              Mir raucht ganz schön der Kopf… denn wie gesagt Scripten ist nun alles andere als meine Welt, aber ich hab auch den Ergeiz das hier so zu lösen dass ich am Ende zumindest in etwa verstehe warum es geht.

                              Ich bin sehr dafür dass wir weiter machen, wenn du die Geduld hast das ganze mit mir gemeinsam zu ende zu bringen.

                              Gruss
                              Insomnia

                              1. Hallo Insomnia

                                return false ist so was wie eine Sicherung gegen eine Schleife, soll heißen dass das ganze nach dem Ausführen über onclick nicht wieder in den Ursprung zurück springen kann… oder?

                                Ja, der Link mit dem Ziel „#” (bedeutet Seitenanfang des aktuellen Dokuments) wird nicht mehr ausgeführt.

                                Das heißt der Benutzer klickt auf den butten der hat den befehlsteil onclick="div_an ('infos')

                                Das reicht dann der funktion div_an um den Namen des Divs und zwar 'infos' als (myId) zu verstehen und somit muss ich 'infos' nicht extra in die Funktion eintragen… hab ich das im Ansatz so richtig verstanden?

                                Die Funktion wird mit function div_an (myId) definiert, sie erwartet damit genau einen Parameter, der beim Aufruf der Funktion in die Variable myId eingetragen wird. Damit steht dieser innerhalb der Funktion zur Verfügung.
                                Wenn du deinem Div jetzt eine andere Id geben willst, musst du das Javascript nicht ändern sondern nur beim Funktionsaufruf auch die andere Id übergeben.
                                Du kannst auch mehrere Elemente einzeln aus- und einblendbar machen, wenn du dafür jeweils ein anklickbares Element vorsiehst, also mit einem oncklick-Event versiehst. (In aktuellen Browsern muss das nicht unbedingt ein Link sein.)
                                z.B.:
                                <img src="anzeigen1.png" alt="Infos 1 anzeigen" onclick="[code lang=javascript]div_an ('infos1');return false">
                                <img src="ausblenden1.png" alt="Infos 1 ausblenden" onclick="div_aus ('infos1');return false">
                                <img src="anzeigen2.png" alt="Infos 2 anzeigen" onclick="div_an ('infos2');return false">
                                <img src="ausblenden2.png" alt="Infos 2 ausblenden" onclick="div_aus ('infos2');return false">
                                [/code]

                                Mir raucht ganz schön der Kopf… denn wie gesagt Scripten ist nun alles andere als meine Welt, aber ich hab auch den Ergeiz das hier so zu lösen dass ich am Ende zumindest in etwa verstehe warum es geht.

                                Nichts ist „meine Welt”, bevor ich es wenigstens ein wenig gelernt und einigermaßen verstanden habe.

                                Ich bin sehr dafür dass wir weiter machen, wenn du die Geduld hast das ganze mit mir gemeinsam zu ende zu bringen.

                                OK, jetzt aber nicht mehr, ist schon reichlich spät (oder früh). Wenns die Zeit erlaubt, können wir heute Nachmittag weitermachen.

                                Auf Wiederlesen
                                Detlef

                                --
                                - Wissen ist gut
                                - Können ist besser
                                - aber das Beste und Interessanteste ist der Weg dahin!
                                1. Hallo Detlef,

                                  Ich wünsche Dir eine gute Nacht...

                                  was mich angeht mein Nichtname kommt nicht von ungefähr ich kann ohne hin noch nicht schlafen.

                                  Wenn ich recht verstanden habe was ich bei G@@le und in SELFHTML gesehen habe müsste das auch gehen.

                                  <a href="#" onclick="div_an ('infos01','infos02','infos03');return false">Tick Tack To</a>

                                  Das heißt, mit Klick auf einen Butten rufe ich über die gleiche Funktion...

                                  function div_an (myId)

                                  ...gleich mehrere Divs auf... wäre das vom Ansatz richtig?

                                  Gruss
                                  Insomnia

                                  1. Hallo Detlef,

                                    ich hab eben mit meinem Bekanten gesprochen und er hat mir gesagt dass er seit kurzem von Opera auf Firefox 2.0.0.16. für Mac umgestiegen ist und das Problem eben unter Firefox auftritt. Ich benutze auf meinem Rechner genau die gleiche Version jedoch für PC und da ist alles wunderbar.

                                    Sorry, ich dachte er benutzt immer noch Opera.

                                    Wir haben ein paar Dinge durch probiert um die Sache vielleicht noch mal etwas genauer zu beleuchten.

                                    Bei:

                                    Visibility: hidden;  
                                    overflow: auto;
                                    

                                    Ist der der Scrollbalken zu sehen…

                                    Visibility: hidden;  
                                    overflow: scroll;
                                    

                                    Ist der auch zu sehen…

                                    Visibility: hidden;  
                                    overflow: hidden;
                                    

                                    Ist er wie zu erwarten weg, aber macht natürlich auch wenig sinn.

                                    display: none;  
                                    overflow: auto;  
                                    
                                    

                                    Ist alles so wie es sein soll und damit auch ganz wie von dir vermutet.

                                    Ist der Bug (ich gehe davon aus das es einer ist) bei Firefox 2.0.0.16. für Mac schon bekannt, denn ich habe nichts finden können.

                                    So ich hoffe meine kleine Abhandlung hat sich gelohnt.

                                    Gruss
                                    Insomnia

                                  2. Hallo Insomnia,

                                    ist nicht mehr Nachmittag, trotzdem ein paar Zeilen.

                                    Wenn ich recht verstanden habe was ich bei G@@le und in SELFHTML gesehen habe müsste das auch gehen.

                                    <a href="#" onclick="div_an ('infos01','infos02','infos03');return false">Tick Tack To</a>

                                    Das heißt, mit Klick auf einen Butten rufe ich über die gleiche Funktion...

                                    function div_an (myId)

                                    Hierbei versuchst du der Funktion drei Parameter zu übergeben, sie erwartet aber nur einen. Welchen der Parameter soll sie denn nun in die Variable myId packen. Natürlich wäre es möglich, eine Funktion zu schreiben, der du mehrere Ids übergeben kannst, und die diese dann abarbeitet. Das würde dann allerdings etwas aufwendiger.

                                    Willst du mehrere Elemente aus- und einblenden?

                                    Wollen wir das Script so erweitern, dass du mehrere Elemente aus- und einblenden kannst, oder wollen wir es so erweitern, dass ein Script gleich beides kann?

                                    Auf Wiederlesen
                                    Detlef

                                    --
                                    - Wissen ist gut
                                    - Können ist besser
                                    - aber das Beste und Interessanteste ist der Weg dahin!
                                    1. Guten morgen Detlef,

                                      klasse wäre ein Script das mehrere Parameter übernehmen kann und dass das Div sowohl ein- wie auch ausblenden kann.

                                      Im konkreten Fall ist es so dass das Div noch einen mit X gekennzeichneten Butten hat damit man das ganze auch wieder ausblenden kann. Es wäre auch für die Zukunft klasse, wenn wir das Script so gestalten könnten das es viele Parameter übernehmen kann, damit ich nicht wieder zum Machwerk des Bösen, das da mit MM anfängt zurück greifen muss.

                                      Zum einblenden würde der link so aussehen.

                                      <a href="#" onclick="div_an ('infos01','x-butten');return false">Infos</a>

                                      Zum ausblenden:

                                      <a href="#"><img src="../pic/x.gif" width="11" height="11" border="0" onclick="div_aus ('info','x-butten');return false" /></a>

                                      Als Ausgangsbasis für die nächsten schritte haben wir dieses Script, es würde das Div ausblenden, könnte aber unter anderem nur einen Parameter übernehmen und einblenden kann es auch noch nicht:

                                      function div_an (myId) {  
                                      if (document.getElementById) {  
                                      var el = document.getElementById (myId);  
                                      if (el && el.style) {  
                                      el.style.display = 'block';  
                                          }  
                                        }  
                                      }
                                      

                                      So weit so gut, ich denke grundlegend habe ich alles verstanden, wir können das ganze jetzt gerne vorantreiben.

                                      Hast Du gestern noch meine kleine Abhandlung, hier in unserem Beitrag über Firefox 2.0.0.16. für Mac gelesen? Da du dazu nichts geschrieben hast ist dir das vielleicht entgangen.

                                      Grüsse
                                      Insomnia

                                      1. Hoppla da hat sich ein kleiner Fehler eingeschlichen...

                                        <a href="#" onclick="div_an ('info','x-butten');return false">Infos</a>

                                        nun ist es aber richtig.

                                      2. Hallo Insomnia

                                        klasse wäre ein Script das mehrere Parameter übernehmen kann …

                                        Ich denke eher nicht.
                                        Warum?
                                        Weißt du, wie viele Elemente du ausblenden willst?
                                        Im Moment bestimmt, aber weißt du zuverlässig, ob es genauso viele Elemente nach der nächsten Änderung der Seite sind, oder auf der nächsten Seite sind, die du schreibst?

                                        Wir können also kaum sicher sein immer die gleiche Anzahl Elemente ausblenden zu wollen. Eine Möglichkeit eine Funktion zu schreiben, die eine beliebige Anzahl Parameter erwartet fällt mir nicht ein.

                                        Du willst doch nicht wirklich ein Script, das mehrere Parameter übernehmen kann, sondern eines, dem du mehrere Ids übergeben kannst. Das ist ein Unterschied. Wir brauchen doch nicht unbedingt einen extra Parameter für jede Id, wir könnten doch eine Liste mit Ids in einem Parameter übergeben.
                                        Doch dazu dann später.

                                        und dass das Div sowohl ein- wie auch ausblenden kann.

                                        Konzentrieren wir uns erstmal hierauf.

                                        Was müssten wir bei dem jetzigen Script tun, damit ein- _und_ ausgeblendet werden kann?
                                        Erstmal müssen wir den Namen ändern, der jetzige wäre dann wohl unpassend. ;)
                                        Nennen wir die Funktion einfach „div_ein_aus” - nein, nicht wirklich gut, sie kann ja nicht nur Divs sondern genauso gut auch andere Blockelemente ein- oder ausblenden, also „block_ein_aus”.

                                        Dann brauchen wir eine Möglichkeit der Funktion zu sagen, ob sie ein- oder ausblenden soll.
                                        Ein zweiter Parameter wäre wohl gut, der das übernimmt, dann könnte die Funktion so definiert werden:

                                        function block_ein_aus (myId, aktion)

                                        Jetzt schauen wir uns die Funktion genau an.
                                        Welche Zeile des Scripts bewirkt das Einblenden?
                                        Wie müsste die Zeile aussehen, damit diese nicht ein- sondern ausblendet?
                                        Wie könnte unser Parameter „aktion” dafür sorgen, dass genau das Richtige geschieht?

                                        Zum ausblenden:

                                        <a href="#"><img src="../pic/x.gif" width="11" height="11" border="0" onclick="div_aus ('info','x-butten');return false" /></a>

                                        Warum unbedingt der Link?
                                        Warum nicht einfach so:

                                        <img src="../pic/x.gif" width="11" height="11" border="0" onclick="box_ein_aus ('info','aus');return false" />

                                        Hast Du gestern noch meine kleine Abhandlung, hier in unserem Beitrag über Firefox 2.0.0.16. für Mac gelesen? Da du dazu nichts geschrieben hast ist dir das vielleicht entgangen.

                                        Nein, mir kann kein Posting in einem Thread entgehen, den ich nicht komplett ausgeblendet habe. Alle Postings, die ich selbst verfasst habe sind bei mir farblich hervorgehoben und alle gelesenen Postings auch (mit einer anderen Farbe). Außerdem sind alle Threads, die nur noch gelesene Postings enthalten zugeklappt und automatisch wieder ausgeklappt, sobald ein ungelesenes Posting darin erscheint. Das macht das Forum sehr übersichtlich.

                                        Geantwortet habe ich nicht darauf, weil es schon wieder so spät geworden war, und weil du lediglich meine Vermutung bestätigt hast.

                                        Ist der Bug (ich gehe davon aus das es einer ist) bei Firefox 2.0.0.16. für Mac schon bekannt, denn ich habe nichts finden können.

                                        Der Bug ist mir nicht bekannt. Ich habe auch keinen Mac, so dass ich ihn selbst nicht nachvollziehen kann.

                                        Auf Wiederlesen
                                        Detlef

                                        --
                                        - Wissen ist gut
                                        - Können ist besser
                                        - aber das Beste und Interessanteste ist der Weg dahin!
                                        1. Hallo

                                          Warum nicht einfach so:

                                          <img src="../pic/x.gif" width="11" height="11" border="0" onclick="box_ein_aus ('info','aus');return false" />

                                          Natürlich _mit_ Alt-Attribut!

                                          <img src="../pic/x.gif" width="11" height="11" border="0" onclick="[code lang=javascript]box_ein_aus ('info','aus');return false" alt="Info ausblenden" />[/code]

                                          Auf Wiederlesen
                                          Detlef

                                          --
                                          - Wissen ist gut
                                          - Können ist besser
                                          - aber das Beste und Interessanteste ist der Weg dahin!
                                          1. Natürlich _mit_ Alt-Attribut!

                                            <img src="../pic/x.gif" width="11" height="11" border="0" onclick="[code lang=javascript]box_ein_aus ('info','aus');return false" alt="Info ausblenden" />[/code]

                                            okay bei der nächsten Zusammenfassung denke ich an Alt-Attribut. ;o)

                                            Gruss
                                            Insomnia

                                        2. Hallo Detlef,

                                          schön wieder von dir zu lesen… ich freu mich sehr das du dir die Zeit nimmst.

                                          Du willst doch nicht wirklich ein Script, das mehrere Parameter übernehmen kann, sondern eines, dem du mehrere Ids übergeben kannst. Das ist ein Unterschied. Wir brauchen doch nicht unbedingt einen extra Parameter für jede Id, wir könnten doch eine Liste mit Ids in einem Parameter übergeben.
                                          Doch dazu dann später.

                                          Du hast vollkommen recht es soll mehr als 1 oder 2 IDs übernehmen können… dass heißt also ich hab ID fälschlicherweise als Parameter bezeichnet. So mit ist klar das ganze sind zwei paar Stiefel.

                                          Da wir einen weiteren Parameter brauchen um der Funktion zu sagen was sie tun soll ist es offenbar so das ein Parameter etwas beschreit, also in unserem fall die wahlmöglichkeit ein-/ausblenden. Dem gegenüber ist eine ID eine Bezeichnung wie z.B. für das Divs… "info"

                                          Warum unbedingt der Link?
                                          Warum nicht einfach so:

                                          <img src="../pic/x.gif" width="11" height="11" border="0" onclick="box_ein_aus ('info','aus');return false" />

                                          Okay, ich kann dem x.gif also direkt die Anweisung onclick geben, dann also ohne Link.

                                          Also bring ich alles auch den aktuellen stand:

                                          Textlink zum einschalten:

                                          <a href="#" onclick="block_ein_aus ('info','x-butten');return false">Infos</a>

                                          Grafikbutten zum ausschalten:

                                          <img src="../pic/x.gif" width="11" height="11" border="0" onclick="block_ein_aus ('info','aus');return false" />

                                          Das Script, bis zum jetzigen Zeitpunkt auch wenn es so noch nicht funktionstüchtig wäre:

                                            
                                          function block_ein_aus (myId, aktion) {  
                                          if (document.getElementById) {  
                                          var el = document.getElementById (myId); // ich denke hier ist erst mal nur die ID gefragt  
                                          if (el && el.style) {  
                                          el.style.display = 'block';  
                                              }  
                                            }  
                                          }  
                                          
                                          

                                          So ich hoffe mal das kommt in etwa hin.

                                          Gruss
                                          Insomnia

                                          1. Hallo Insomnia

                                            Du hast vollkommen recht es soll mehr als 1 oder 2 IDs übernehmen können… dass heißt also ich hab ID fälschlicherweise als Parameter bezeichnet.

                                            Es ist erstmal nur ein String, der alles Mögliche enthalten könnte. Für unser Script ist genau eine Id als Inhalt sinnvoll. Wir können es dann später auch noch so erweitern, dass es auch eine Liste mit mehreren Ids sein kann.

                                            Da wir einen weiteren Parameter brauchen um der Funktion zu sagen was sie tun soll ist es offenbar so das ein Parameter etwas beschreit, also in unserem fall die wahlmöglichkeit ein-/ausblenden.

                                            Ein Parameter kann je nachdem, was eine Funktion tun soll, alles Mögliche sein, eine Zahl, mit der sie rechnen soll, die Id eines Elements, mit dem etwas passieren soll, eine Zeichenkette, die bearbeitet oder ausgegeben werden soll. Fast alles ist möglich.
                                            Man kann auch Funktionen schreiben, die keine Parameter erwarten. Dann müsste man aber z.B. für jedes Element, was man ausblenden will, eine extra Funktion schreiben und diese dann jedesmal ändern, wenn andre Ids verwendet werden sollen.

                                            Dem gegenüber ist eine ID eine Bezeichnung wie z.B. für das Divs… "info"

                                            Die Id ist ein eindeutiger Bezeichner für genau ein bestimmtes Element, in deinem Fall das Div.
                                            Mit el = document.getElementById (myId) sage ich praktisch: „Klappere mal das Dokument durch, ob du irgendwo ein Element findest, dass die Identifikation trägt, die in der Variablen myId gespeichert ist. Wenn du eins findest, speichere eine Referenz darauf in el, damit wir das Dokument nicht immer wieder neu duchklappern müssen wenn wir dieses Element, seine Eigenschaften oder Attribute brauchen.”

                                            Textlink zum einschalten:

                                            <a href="#" onclick="block_ein_aus ('info','x-butten');return false">Infos</a>

                                            Hältst du es für optimal, „x-butten” als aktion-Parameter zum Anzeigen zu verwenden?
                                            Mir käme dafür „ein” angemessener vor.

                                            function block_ein_aus (myId, aktion) {
                                            if (document.getElementById) {
                                            var el = document.getElementById (myId); // ich denke hier ist erst mal nur die ID gefragt
                                            if (el && el.style) {
                                            el.style.display = 'block';
                                                }
                                              }
                                            }

                                              
                                            Bitte lasse die Einrückungen drin. Ohne diese ist es nur unübersichtlicher.  
                                            Wenn du es dir mal anschaust, mit `function`{:.language-javascript} beginnt ein Block, der mit der letzten Klammer endet. Alles dazwischen war eingerückt, dann mit jedem `if`{:.language-javascript} etwas weiter. Dadurch sieht man schnell, wo ein Block beginnt und wo er endet, man kann auf einen Blick erkennen, wie weit jedes `if`{:.language-javascript} wirkt, also welche Zeilen übersprungen werden, wenn die Bedingung innerhalb der runden Klammern nicht zutrifft.  
                                              
                                            So, jetzt lass ich dich noch ein wenig über die Fragen aus meinem letzten Posting nachdenken.  
                                              
                                              
                                            Auf Wiederlesen  
                                            Detlef  
                                            
                                            -- 
                                            - Wissen ist gut  
                                            - Können ist besser  
                                              
                                            - aber das Beste und Interessanteste ist der Weg dahin!
                                            
                                            1. Hallo Detlef,

                                              Welche Zeile des Scripts bewirkt das Einblenden?

                                              function div_an (myId) {
                                                if (document.getElementById) {
                                                  var el = document.getElementById (myId);
                                                  if (el && el.style) {
                                                    el.style.display = 'block';          // hier erfolgt das einblenden
                                                  }
                                                }
                                              }

                                              Wie müsste die Zeile aussehen, damit diese nicht ein- sondern ausblendet?

                                              function div_an (myId) {
                                                if (document.getElementById) {
                                                  var el = document.getElementById (myId);
                                                  if (el && el.style) {
                                                    el.style.display = 'none';          // nun würde das Div ausgeblendet
                                                  }
                                                }
                                              }

                                              Wie könnte unser Parameter „aktion” dafür sorgen, dass genau das Richtige geschieht?

                                              Ich denke wir brauchen so eine art if / else abfrage… also mit meinen Worten.

                                              Funktion schaue nach,

                                              Ist

                                              der Zustand  'none' aktiv, wenn ja blende ein.

                                              sonst

                                              blende aus.

                                              Ich denke doch das waren die fragen, oder?

                                              Hältst du es für optimal, „x-butten” als aktion-Parameter zum Anzeigen zu verwenden?
                                              Mir käme dafür „ein” angemessener vor.

                                              Eigentlich wir der „x-butten” zusammen mit dem Div-info eingeblendet und dient dem ausblenden. Er ist dem Browser butten oben rechts nicht optisch nicht unähnlich. Ich hab den Namen x-butten gewählt damit ich gleich ein Bild von dem Ding im Kopf habe und es somit besser zuordnen kann... „aus” wäre natürlich auch möglich, aber ist natürlich auch abstrakter.

                                              Gruss
                                              Insomnia

                                              1. Du möchtest deine Funktion verallgemeinern.

                                                Du hast z.B. zwei Elemente, die du aus/ein-blenden könntest.

                                                a) ein Blockelement z.B. <div>
                                                b) ein Inlineelement Z.B <span>

                                                Problem
                                                Wenn du die Id für das Inlinelement übergibst, dann ist es falsch display:block zu setzen (als default vorauszusetzen).
                                                Irgendwie musst du den Zustand speichern, bevor du ihn änderst, damit du ihn später restaurieren kannst.

                                                Rüber gekommen?

                                                mfg Beat

                                                --
                                                Woran ich arbeite:
                                                X-Torah
                                                ><o(((°>      ><o(((°>
                                                   <°)))o><                      ><o(((°>o
                                                1. Hallo Beat,

                                                  hast du irgendeines der anderen Postings gelesen?

                                                  Problem
                                                  Wenn du die Id für das Inlinelement übergibst, dann ist es falsch display:block zu setzen (als default vorauszusetzen).

                                                  Die Funktion heißt (und das wurde von mir extra betont) block_ein_aus ()!

                                                  Irgendwie musst du den Zustand speichern, bevor du ihn änderst, damit du ihn später restaurieren kannst.

                                                  Das Element, um das es hier ging ist anfänglich auf display:none gesetzt, viel Erfolg damit, den Ursprungszustand zum Einblenden zu rekonstruieren.

                                                  (Außerdem müsste der Ursprungszustand auch nur gespeichert werden, wenn dieser vorher mittels Inlinestyle gesetzt worden wäre.)

                                                  Ist hier irgendwo ein (deiner Meinung nach) fehlerhaftes fertiges Script gepostet worden?

                                                  Wenn du dir die Mühe gemacht hättest, nur ein oder zwei Postings, außer dem, worauf du dich beziehst, zu lesen, hätte dir auffallen müssen, dass ich hier versuche Stück für Stück ein Script zusammenzubauen, das Insomnia auch versteht.

                                                  Auf Wiederlesen
                                                  Detlef

                                                  --
                                                  - Wissen ist gut
                                                  - Können ist besser
                                                  - aber das Beste und Interessanteste ist der Weg dahin!
                                                2. Hallo Beat,

                                                  der Beitrag hier zieht sich über etliche Postings. Im Grunde hat alles mit CSS und einem Scrollbalten angefangen und nun sind wir bei JavaSript gelandet.

                                                  Das ganze hier im einzelnen wieder zugeben würde den rahmen sprengen, aber ich bin dir dennoch dankbar für den versuch mich zu unterstützen.

                                                  Damit ich jedoch den roten faden, denn Detlef und ich gelegt habe nicht verliere ist es für mich sicher von Vorteil mich auf eine Person zu konzentrieren.

                                                  Das Handicap an der ganzen Sache ist dass Scripten nicht gerade meine stärken ist und dennoch möchte ich das JavaScript zumindest in den Grundlagen verstehen anstatt einfach irgendwo zu kopieren.

                                                  So nun weißt du wenigsten worauf Detlef sich eingelassen hat… *lach

                                                  Insomnia

                                              2. Hallo Insomnia

                                                Welche Zeile des Scripts bewirkt das Einblenden?

                                                function div_an (myId) {
                                                  if (document.getElementById) {
                                                    var el = document.getElementById (myId);
                                                    if (el && el.style) {
                                                      el.style.display = 'block';          // hier erfolgt das einblenden
                                                    }
                                                  }
                                                }

                                                Ja (und auch wieder schön eingerückt).

                                                Wie müsste die Zeile aussehen, damit diese nicht ein- sondern ausblendet?

                                                function div_an (myId) {
                                                  if (document.getElementById) {
                                                    var el = document.getElementById (myId);
                                                    if (el && el.style) {
                                                      el.style.display = 'none';          // nun würde das Div ausgeblendet
                                                    }
                                                  }
                                                }

                                                Ja, genau.

                                                Wie könnte unser Parameter „aktion” dafür sorgen, dass genau das Richtige geschieht?

                                                Ich denke wir brauchen so eine art if / else abfrage… also mit meinen Worten.

                                                Funktion schaue nach,

                                                Ist

                                                der Zustand  'none' aktiv, wenn ja blende ein.

                                                Nö.
                                                Wir wollten es doch von „aktion” abhängig machen und nicht von seinem vorherigen Zustand.

                                                Eigentlich wir der „x-butten” zusammen mit dem Div-info eingeblendet und dient dem ausblenden.

                                                Wolltest du diesen innerhalb des Div-info anordnen?
                                                Wenn ja, dann braucht er nicht extra aus- und eingeblendet zu werden. Wenn ein Vorfahrenelement aufgeblendet ist, ist der Inhalt auch weg, und erscheint ganz von allein, wenn dieses eingeblendet wird.

                                                Auf Wiederlesen
                                                Detlef

                                                --
                                                - Wissen ist gut
                                                - Können ist besser
                                                - aber das Beste und Interessanteste ist der Weg dahin!
                                                1. Nö.

                                                  Wir wollten es doch von „aktion” abhängig machen und nicht von seinem vorherigen Zustand.

                                                  Hm… also eines scheint mir sicher zu sein die Funktion muss über den "ist" zustand bescheit wissen. Entweder fragt sie in ab oder sie hat ihn gespeichert.

                                                  Da musst du mir wohl etwas auf die Sprünge helfen.

                                                  »»Wolltest du diesen innerhalb des Div-info anordnen?
                                                  Wenn ja, dann braucht er nicht extra aus- und eingeblendet zu werden. Wenn ein Vorfahrenelement aufgeblendet ist, ist der Inhalt auch weg, und erscheint ganz von allein, wenn dieses eingeblendet wird.

                                                  Der Butten ist außerhalb von Div-info, innerhalb gibt es nur Fliestext.

                                                  Gruss
                                                  Insomnia

                                                  1. Hallo Insomnia

                                                    Hm… also eines scheint mir sicher zu sein die Funktion muss über den "ist" zustand bescheit wissen. Entweder fragt sie in ab oder sie hat ihn gespeichert.

                                                    Solange die Funktion nicht immer abwechselnd über den gleichen Aufruf ein- und ausschalten soll, ist der „ist”-Zustand egal.
                                                    Wenn jemand auf den Anzeigen-Link klickt, obwohl es bereits angezeigt wird, wird display eben nochmal auf block gesetzt, obwohl es bereits auf block gesetzt war. Es passiert also einfach nichts.

                                                    Wir müssen überlegen, wie wohl die Bedingung (für das if) formuliert werden müsste, die prüft, ob der Wert in aktion „ein” lautet. (Die Variante für „aus” ergibt sich dann ja von allein.)
                                                    Schau dazu mal bei Wenn-Dann-Bedingungen mit "if" und bei Vergleichsoperatoren.

                                                    Der Butten ist außerhalb von Div-info, innerhalb gibt es nur Fliestext.

                                                    OK, ich hatte es so verstanden, dass er in diesem Div wäre.

                                                    Auf Wiederlesen
                                                    Detlef

                                                    --
                                                    - Wissen ist gut
                                                    - Können ist besser
                                                    - aber das Beste und Interessanteste ist der Weg dahin!
                                                    1. Hallo Detlef,

                                                      Kein guter Tag für mich… das ganze hat was von "Sag es in Chinesisch", ich weiss zwar was ich sagen möchte, aber ich kann es nicht in die richtigen Worte fassen.

                                                      Nach dem ich nun über den Links gebrütet habe hier meine Gedanken…

                                                      Es ist offenbar doch so das wir if / else benötigen um dem Script leben einzuhauchen.

                                                      Ich glaube verstanden zu haben das wir etwas vergleichen müssen, entweder mit == oder !=

                                                      Vielleicht muss man dazu unsere Parameter aktion nutzen, in dem man ihr mit var einen sinn (wert) gibt der möglicherweise .style.display = 'block' oder nur 'block' sein könnte damit das dann in der if abfrage in funktionierenden bezug gebracht werden kann?

                                                      Wäre das ganze also unterschiedlich != würde nach der if abfrage dies ausgeführt werden

                                                      el.style.display = 'block';

                                                      würde die abfrage aber übereinstimmen kommt...

                                                      else

                                                      ins spiel und somit

                                                      el.style.display = 'none';

                                                      Ich kann nur sagen ich hab keine Ahnung ob das wenigstens im Ansatz richtig ist.

                                                      Gruss
                                                      Insomnia

                                                      1. Hallo Insomnia,

                                                        ich bin heute ziemlich fertig, so dass ich mich nur kurz melde, damit du nicht denkst, dass ich dich vergessen hätte.
                                                        Morgen Nachmittag bzw. Abend werde ich voraussichtlich mehr Zeit haben, so dass ich dir dann ausführlich antworten kann.

                                                        Auf Wiederlesen
                                                        Detlef

                                                        --
                                                        - Wissen ist gut
                                                        - Können ist besser
                                                        - aber das Beste und Interessanteste ist der Weg dahin!
                                                        1. Hallo Detlef,

                                                          danke für deine Nachricht dann weiss ich bescheit, erhol dich gut. Ich bin schon sehr gespannt das Rätsel um unser Script endlich zu lösen.

                                                          Grüsse
                                                          Insomnia

                                                        2. also ich hab es getestet... da läuft aber noch was schief...

                                                          Es wird nur Box01 angezeigt, die anderen bleiben unsichtbar.

                                                          <a href="#" onclick="blocks_an_aus ('box01','box02','box03','box04') ;return false">TEST</a>  
                                                            
                                                          function blocks_an_aus (myIds, aktion) {  
                                                            if (document.getElementById) {  
                                                              var IdArr = myIds.split(" ");  
                                                              for (var i = 0; i < IdArr.length; i++) {  
                                                                var el = document.getElementById (IdArr[i]);  
                                                                if (el && el.style) {  
                                                                  if (aktion != 'aus') {  
                                                                    el.style.display = 'block';  
                                                                  } else {  
                                                                    el.style.display = 'none';  
                                                                  }  
                                                                }  
                                                              }  
                                                            }  
                                                          }  
                                                          
                                                          
                                                        3. Hoppla hab ich die nachricht doch falsch gesetzt...

                                                          kommt davon wenn man im stress 3 sachen gleichzeitig machen möchte.

                                                          Wie schon geschrieben, es wird nur box01 angezeigt, der rest bleibt unsichtbar.

                                                          <a href="#" onclick="blocks_an_aus ('box01','box02','box03','box04') ;return false">TEST</a>

                                                          function blocks_an_aus (myIds, aktion) {
                                                            if (document.getElementById) {
                                                              var IdArr = myIds.split(" ");
                                                              for (var i = 0; i < IdArr.length; i++) {
                                                                var el = document.getElementById (IdArr[i]);
                                                                if (el && el.style) {
                                                                  if (aktion != 'aus') {
                                                                    el.style.display = 'block';
                                                                  } else {
                                                                    el.style.display = 'none';
                                                                  }
                                                                }
                                                              }
                                                            }
                                                          }

                                                          Grüsse
                                                          Insomnia

                                                        4. Und noch mal... *grummel

                                                          ich hoffe das nimmt mir kein Admin krumm

                                                          ****

                                                          Hoppla hab ich die nachricht doch falsch gesetzt...

                                                          kommt davon wenn man im stress 3 sachen gleichzeitig machen möchte.

                                                          Wie schon geschrieben, es wird nur box01 angezeigt, der rest bleibt unsichtbar.

                                                          <a href="#" onclick="blocks_an_aus ('box01','box02','box03','box04') ;return false">TEST</a>

                                                          function blocks_an_aus (myIds, aktion) {
                                                            if (document.getElementById) {
                                                              var IdArr = myIds.split(" ");
                                                              for (var i = 0; i < IdArr.length; i++) {
                                                                var el = document.getElementById (IdArr[i]);
                                                                if (el && el.style) {
                                                                  if (aktion != 'aus') {
                                                                    el.style.display = 'block';
                                                                  } else {
                                                                    el.style.display = 'none';
                                                                  }
                                                                }
                                                              }
                                                            }
                                                          }

                                                          Grüsse
                                                          Insomnia

                                                          1. [latex]Mae  govannen![/latex]

                                                            <a href="#" onclick="blocks_an_aus ('box01','box02','box03','box04') ;return false">TEST</a>

                                                            Du übergibst hier 4 Parameter: 'box01','box02','box03','box04'

                                                            die du hier

                                                            function blocks_an_aus (myIds, aktion) {

                                                            in Variable packen willst. Somit hat die Variable myIds den String 'box01' zugewiesen bekommen und die Variable aktion wurde mit
                                                            'box02' belegt.

                                                            In der Funktion hast du aber

                                                            var IdArr = myIds.split(" ");

                                                            also willst du am Leerzeichen trennen. Also übergib die Werte entsprechen in _einem_ Parameter mit Leerzeichen getrennt.

                                                            Ich halte aber auch diese Vorgehenweise für nicht optimal, besser wäre eine Funktion, die als ersten Parameter die Aktion enthält und als weitere Parameter (beliebige Menge) dann die IDs.  Auslesen über arguments bzw arguments.length, dann sparst du dir den unnötigen Umweg mit split etc. und must von arguments.length nur 1 abziehen für den ersten Parameter (aktion)

                                                            Cü,

                                                            Kai

                                                            --
                                                            Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
                                                            Sacrifice - the future has it's price
                                                            And today is only yesterday's tomorrow
                                                            selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
                                                            1. [latex]Mae  govannen![/latex]

                                                              Ich halte aber auch diese Vorgehenweise für nicht optimal, besser wäre eine Funktion, die als ersten Parameter die Aktion enthält und als weitere Parameter (beliebige Menge) dann die IDs.  Auslesen über arguments bzw arguments.length, dann sparst du dir den unnötigen Umweg mit split etc. und must von arguments.length nur 1 abziehen für den ersten Parameter (aktion)

                                                              Toll, wollte nur mal zwischendurch die Vorschau sehen *grummel* Dann eben ein neuer Beitrag:

                                                              Wenn du es so wie oben machst, kannst du die Schreibweise im Link fast beibehalten und mußt nur noch als ersten Parameter die Aktion setzen:

                                                              blocks_an_aus('an','box01','box02','box03','box04');

                                                              Die Schleife würde dann bei 1 beginnen, weil der erste Paramenter keine ID ist:

                                                              for (var i = 1, l = arguments.length - 1; i < l ; i++) {  
                                                                var el = document.getElementById (arguments[i]);  
                                                                // Abfrage etc. wie gehabt  
                                                              }
                                                              

                                                              Cü,

                                                              Kai

                                                              --
                                                              Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
                                                              Sacrifice - the future has it's price
                                                              And today is only yesterday's tomorrow
                                                              selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
                                                              1. Grüss dich Kai,

                                                                Detlef hat mich so zusagen durchs verständnis dieses Skripts geführt, möglicherweise hat er den weg mit Split() benutz um nur das prinzip zu veranschaulichen.

                                                                Er hatte auf die korrekte Schreibweise hingewiesen… ich hab nur im moment so viel um die ohren das es mir entfallen war

                                                                Zitat:

                                                                // …ein String, der jeweils beim Trennzeichen (dem Leerzeichen) geteilt wird, und die einzelnen Teile jedes einzeln in ein Element eines Arrays eingetragen wird.
                                                                Aus _einer_ Zeichenkette wird eine Reihe von Zeichenketten, die jeweils einen Teil enthalten.

                                                                Was mir bei deiner Altanative nicht klar ist… was ist 'an'

                                                                blocks_an_aus('an','box01','box02','box03','box04');

                                                                Gruss
                                                                Insomnia

                                                                1. [latex]Mae  govannen![/latex]

                                                                  Was mir bei deiner Altanative nicht klar ist… was ist 'an'

                                                                  blocks_an_aus('an','box01','box02','box03','box04');

                                                                  Einer der beiden Zustände 'an' oder 'aus' nach denen die Funktion (blocks_an_aus) benannt wurde.
                                                                  Da in der Funktion ohnehin nur auf != 'aus' geprüft wird, also jeder String, der _nicht_ 'aus' lautet, zum Anzeigen der Elemente führt, könnte dort theoretisch auch 'rosarotmitgelbenpunkten' stehen ;-) (Das wäre aber verwirrend, daher habe ich die logische Alternative 'an' gewählt.

                                                                  Cü,

                                                                  Kai

                                                                  --
                                                                  Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
                                                                  Sacrifice - the future has it's price
                                                                  And today is only yesterday's tomorrow
                                                                  selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
                                                                2. Hallo Insomnia

                                                                  Detlef hat mich so zusagen durchs verständnis dieses Skripts geführt, möglicherweise hat er den weg mit Split() benutz um nur das prinzip zu veranschaulichen.

                                                                  Nein, ich hatte nicht vor, dir das Prinzip unbedingt mittels split() zu erleutern.
                                                                  Wenn ich ehrlich bin, hatte ich wohl Scheuklappen auf oder ein Brett vorm Kopf [1], dass mir Kais Lösung überhaupt nicht dachte.

                                                                  Was mir bei deiner Altanative nicht klar ist… was ist 'an'

                                                                  Wir hatten inkonsequenterweise immer 'ein' geschrieben.

                                                                  Auf Wiederlesen
                                                                  Detlef

                                                                  [1] Woran erkennt man einen Snob?
                                                                      Bei dem ist das Brett vorm Kopf aus Teakholz.

                                                                  --
                                                                  - Wissen ist gut
                                                                  - Können ist besser
                                                                  - aber das Beste und Interessanteste ist der Weg dahin!
                                                                  1. Hallo Detlef,

                                                                    schön dich zu lesen...

                                                                    [1] Woran erkennt man einen Snob?
                                                                        Bei dem ist das Brett vorm Kopf aus Teakholz.

                                                                    *lach

                                                                    Gut dann werde ich die lösung von Kai mal weiter verflogen und morgen testen... heute muss ich noch an einem projekt arbeiten.

                                                                    Also bis morgen
                                                                    Insomnia

                                                              2. Hallo Kai

                                                                Ich halte aber auch diese Vorgehenweise für nicht optimal, besser wäre eine Funktion, die als ersten Parameter die Aktion enthält und als weitere Parameter (beliebige Menge) dann die IDs.  Auslesen über arguments bzw arguments.length, dann sparst du dir den unnötigen Umweg mit split etc. und must von arguments.length nur 1 abziehen für den ersten Parameter (aktion)

                                                                Wie ich bereits schrieb hatte ich an diese Möglichkeit überhaupt nicht gedacht, irgendwie war es mir absolut nicht mehr bewusst, dass bei Javascript die Übergabe einer unbekannten Parameteranzahl so einfach geht.
                                                                Dann dachte ich zuerst, ja, das ist besser, als der Umweg über split().

                                                                Beim weiteren Nachdenken kamen mir dann doch Zweifel, ob meine Lösung wirklich in jedem Fall schlechter ist.
                                                                Meine Gedanken:
                                                                Ist es besser, einfacher, übersichtlicher, beim Funktionsaufruf einen "Aktionparameter" und dahinter eine Reihe einzelner bedeutungsgleicher Parameter zu notieren, oder vielleicht doch, diese als Liste in einem Parameter zusammenzufassen?
                                                                (besser so ('aus', 'id1', 'id2', 'id3', 'id4') oder so ('aus', 'id1 id2 id3 id4')?)
                                                                Erscheint es eventuell verwirrend (mir zumindest auf den ersten Blick), wenn der Funktionsaufruf eine andere Parameterzahl hat, als die Funktionsdefinition? (Oder hilft das vielleicht eher, nicht zu vergessen, dass dies so einfach geht?)
                                                                Bei der split()-Version wäre es einfach, eine Funktion zu schreiben, die mit einem Aufruf gleichzeitig Elemente ein- und andere ausblendet, function blocks_an_aus (an, aus), wobei an und aus die jeweiligen Id-Listen wären.

                                                                Toll, wollte nur mal zwischendurch die Vorschau sehen *grummel* Dann eben ein neuer Beitrag:

                                                                Ich habe in meinen Benutzereinstellungen Vorschau "Per Checkbox aktivieren" und "Per default aktiv" eingestellt, seit dem passiert es mir nicht mehr.

                                                                Auf Wiederlesen
                                                                Detlef

                                                                --
                                                                - Wissen ist gut
                                                                - Können ist besser
                                                                - aber das Beste und Interessanteste ist der Weg dahin!
                                                                1. [latex]Mae  govannen![/latex]

                                                                  Beim weiteren Nachdenken kamen mir dann doch Zweifel, ob meine Lösung wirklich in jedem Fall schlechter ist.
                                                                  Meine Gedanken:
                                                                  Ist es besser, einfacher, übersichtlicher, beim Funktionsaufruf einen "Aktionparameter" und dahinter eine Reihe einzelner bedeutungsgleicher Parameter zu notieren, oder vielleicht doch, diese als Liste in einem Parameter zusammenzufassen?
                                                                  (besser so ('aus', 'id1', 'id2', 'id3', 'id4') oder so ('aus', 'id1 id2 id3 id4')?)

                                                                  Es ist eigentlich nur ein zusätzlicher Schritt, den String per split() aufzuteilen. Und man muß immer darauf achten, daß man die ids mit genau dem in der Funktion erwarteten Trennzeichen übergibt. Ansonsten sollte es egal sein, solange die Funktion selbst nicht gerade in einer iterationsreichen Schleife aufgerufen würde ;)

                                                                  Ich finde eine offene Anzahl jeweils einzelner Parameter für eine solche Funktion schöner, weil ich, ohne nachdenken/schauen zu müssen "welches Trennzeichen erwartet die Funktion noch mal?"  jede ID jeweils einzeln direkt als String übergeben kann. (Und wenn ich komplexere Daten hätte, würde ich die ohnehin als Objektliteral definieren und dieses übergeben, aber das nur nebenbei).

                                                                  Erscheint es eventuell verwirrend (mir zumindest auf den ersten Blick), wenn der Funktionsaufruf eine andere Parameterzahl hat, als die Funktionsdefinition? (Oder hilft das vielleicht eher, nicht zu vergessen, dass dies so einfach geht?)
                                                                  Bei der split()-Version wäre es einfach, eine Funktion zu schreiben, die mit einem Aufruf gleichzeitig Elemente ein- und andere ausblendet, function blocks_an_aus (an, aus), wobei an und aus die jeweiligen Id-Listen wären.

                                                                  Genau hier würde ich das Objektliteral benutzen:

                                                                  var idliste = {  
                                                                    id1: "an",  
                                                                    id2: "an",  
                                                                    id3: "aus",  
                                                                    id4: "an"  
                                                                  };  
                                                                    
                                                                  blocks_an_aus(idliste);  
                                                                  
                                                                  

                                                                  und die Funktion dazu hätte nur noch einen Parameter :)

                                                                  Toll, wollte nur mal zwischendurch die Vorschau sehen *grummel* Dann eben ein neuer Beitrag:
                                                                  Ich habe in meinen Benutzereinstellungen Vorschau "Per Checkbox aktivieren" und "Per default aktiv" eingestellt, seit dem passiert es mir nicht mehr.

                                                                  Ich auch. Nur hab ich statt der Checkbox für die Rechtschreibprüfung eben die Vorschau-Checkbox erwischt und ohne weiter nachzudenken auf absenden gehämmert :(

                                                                  Cü,

                                                                  Kai

                                                                  --
                                                                  Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
                                                                  Sacrifice - the future has it's price
                                                                  And today is only yesterday's tomorrow
                                                                  selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
                                                                  1. Hallo Kai

                                                                    Genau hier würde ich das Objektliteral benutzen:

                                                                    var idliste = {

                                                                    id1: "an",
                                                                      id2: "an",
                                                                      id3: "aus",
                                                                      id4: "an"
                                                                    };

                                                                    blocks_an_aus(idliste);

                                                                    
                                                                    >   
                                                                    > und die Funktion dazu hätte nur noch einen Parameter :)  
                                                                      
                                                                    Sorry, ich hätte es dazuschreiben oder besser formulieren sollen.  
                                                                    Die Gedanken bezogen sich auf genau diesen Thread, welche Version für einen Javascriptanfänger wohl am besser geeignet ist.  
                                                                      
                                                                    
                                                                    > Ich auch. Nur hab ich statt der Checkbox für die Rechtschreibprüfung eben die Vorschau-Checkbox erwischt und ohne weiter nachzudenken auf absenden gehämmert :(  
                                                                      
                                                                    Oh, statt den Haken bei Rechtschreibung zu setzen, den bei Vorschau entfernt…  
                                                                    (Die verwende ich schon lange nicht mehr, mein Browser malt mir immer gleich schöne rote Striche.)  
                                                                      
                                                                      
                                                                    Auf Wiederlesen  
                                                                    Detlef  
                                                                    
                                                                    -- 
                                                                    - Wissen ist gut  
                                                                    - Können ist besser  
                                                                      
                                                                    - aber das Beste und Interessanteste ist der Weg dahin!
                                                                    
                                                                    1. [latex]Mae  govannen![/latex]

                                                                      Sorry, ich hätte es dazuschreiben oder besser formulieren sollen.
                                                                      Die Gedanken bezogen sich auf genau diesen Thread, welche Version für einen Javascriptanfänger wohl am besser geeignet ist.

                                                                      Zuerst scheint meine Version sicherlich wesentlich komplizierter zu sein, aber andererseits ist sie durch weniger Code innerhalb der Funktion auch wieder einfacher. Es ist also eigentlich nur eine Frage, wie gut oder schlecht jemand die eine oder andere Variante verstehen und nachvollziehen kann.

                                                                      Ich hab dich recht verstanden, daß du in deiner Bemerkung...

                                                                      Bei der split()-Version wäre es einfach, eine Funktion zu schreiben, die mit einem Aufruf gleichzeitig Elemente ein- und andere > >ausblendet, function blocks_an_aus (an, aus), wobei an und aus die jeweiligen Id-Listen wären.

                                                                      ...meinst, daß die Funktion im ersten Parameter alle ids enthält, die eingeblendet werden und im zweiten Parameter alle ids, die ausgeblendet werden, jeweils als ein String mit z.B. leerzeichen?

                                                                      Mit Strings:

                                                                      function blocks_an_aus(show_ids, hide_ids) {  
                                                                        var el, IdArr, i;  
                                                                        if (document.getElementById) {  
                                                                          IdArr = show_ids.split(" ");  
                                                                          for (i = 0; i < IdArr.length; i++) {  
                                                                            el = document.getElementById (IdArr[i]);  
                                                                            if (el && el.style) {  
                                                                                el.style.display = 'block';  
                                                                            }  
                                                                          }  
                                                                          IdArr = hide_ids.split(" ");  
                                                                          for (i = 0; i < IdArr.length; i++) {  
                                                                            el = document.getElementById (IdArr[i]);  
                                                                            if (el && el.style) {  
                                                                                el.style.display = 'none';  
                                                                            }  
                                                                          }  
                                                                        }  
                                                                      }  
                                                                      blocks_an_aus('box1 box2 box4','box3 box5');  
                                                                      
                                                                      

                                                                      mit Objekt-Literal:

                                                                        
                                                                      var idliste = {  
                                                                        box1: "an",  
                                                                        box2: "an",  
                                                                        box3: "aus",  
                                                                        box4: "an",  
                                                                        box5: "aus"  
                                                                      };  
                                                                      function blocks_an_aus(id_liste) {  
                                                                        var el, el_id;  
                                                                        if (document.getElementById && id_liste) {  
                                                                          for (el_id in id_liste) {  
                                                                            el = document.getElementById(el_id);  
                                                                            if (el && el.style) {  
                                                                              if (id_liste[el_id] == 'aus') {  
                                                                                el.style.display = 'none';  
                                                                              }  
                                                                              else {  
                                                                                el.style.display = 'block';  
                                                                              }  
                                                                            }  
                                                                          }  
                                                                        }  
                                                                      }
                                                                      

                                                                      Ich würde das für meinen Einsatz noch optimieren und strengere Überprüfungen nutzen: (das ist für Anfänger natürlich nicht mehr geeignet)

                                                                      function blocks_an_aus(id_liste) {  
                                                                        var el, el_id;  
                                                                        if (typeof document.getElementById === 'function' && typeof id_liste === 'object') {  
                                                                          for (el_id in id_liste) {  
                                                                            el = document.getElementById(el_id);  
                                                                            if (el && typeof el === 'object' && el.style) {  
                                                                              el.style.display = (id_liste[el_id] == 'aus') ? 'none' : 'block';  
                                                                            }  
                                                                          }  
                                                                        }  
                                                                      }  
                                                                      
                                                                      

                                                                      Code ist ungetestet.

                                                                      Cü,

                                                                      Kai

                                                                      --
                                                                      Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
                                                                      Sacrifice - the future has it's price
                                                                      And today is only yesterday's tomorrow
                                                                      selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
                                                                      1. An dieser stelle möchte ich euch beiden eines sagen...

                                                                        Hilfe!

                                                                        *lach

                                                                        Nein, eigentlich kann ich dem ganzen sogar in etwa folgen, was vor Detlefs bemühungen sicher nicht der fall gewesen wäre.

                                                                        Wie schon gesagt, ich werde das Script später testen und euch bescheit geben ob ich damit zu recht gekommen bin.

                                                                        Ich freue mich auf jedenfall dass das ganze auf so reges interesse stösst.

                                                                        Grüsse
                                                                        Insomnia

                                                                        1. Hallo Ihr beiden,

                                                                          also so ganz wie es soll geht das Script noch nicht.

                                                                          Beim einblenden wird Box4 nicht eingeblendet…

                                                                          Und wenn ich den Butten benutze der alles wieder schliessen soll, erscheit plötzlich Box4 aber geschlossen wird gar nichts.

                                                                          Vielleicht hab ich ja einen Fehler in Script?

                                                                          <a href="#" onclick="blocks_an_aus ('an','box1','box2','box3','box4') ;return false">Test</a>

                                                                          function blocks_an_aus (myIds, aktion) {  
                                                                            if (document.getElementById) {  
                                                                             for (var i = 1, l = arguments.length - 1; i < l ; i++) {  
                                                                             var el = document.getElementById (arguments[i]);  
                                                                                  if (el && el.style) {  
                                                                                    if (aktion != 'aus') {  
                                                                                     el.style.display = 'block';  
                                                                                  } else {  
                                                                                     el.style.display = 'none';  
                                                                                  }  
                                                                                }  
                                                                              }  
                                                                            }  
                                                                          }
                                                                          

                                                                          Ach so… ich hab mal box3 und box4 den platz  tauschen lassen.

                                                                          <a href="#" onclick="blocks_an_aus ('an','box1','box2','box4','box3') ;return false">Test</a>

                                                                          dann erschien box3 nicht.

                                                                          Grüsse
                                                                          Insomnia

                                                                          1. Hallo Insomnia,

                                                                            ich hätte angenommen, Kai kümmert sich auch weiter zu Problemen mit seinem Lösungsvorschlag.

                                                                            <a href="#" onclick="blocks_an_aus ('an','box1','box2','box3','box4') ;return false">Test</a>

                                                                            Hiermit willst du einblenden. Du übergibst 5 Parameter, dabei setzt aber du „myIds” auf 'an' und „aktion” auf 'box1'!

                                                                            function blocks_an_aus (myIds, aktion) {

                                                                            if (document.getElementById) {
                                                                               for (var i = 1, l = arguments.length - 1; i < l ; i++) {

                                                                              
                                                                            i ist jetzt 1, l ist jetzt arguments.length - 1, also 4.  
                                                                            zur Information:  
                                                                            arguments[0] enthält 'an',  
                                                                            arguments[1] enthält 'box1',  
                                                                            arguments[2] enthält 'box2',  
                                                                            arguments[3] enthält 'box3',  
                                                                            arguments[4] enthält 'box4'  
                                                                              
                                                                            Die Schleife läuft so lange, wie i < l, also wie i < 4, i kann also niemals 4 werden.  
                                                                              
                                                                            
                                                                            >    `var el = document.getElementById (arguments[i]);`{:.language-javascript}  
                                                                              
                                                                            Damit wird arguments[4] ('box4') nie verwendet.  
                                                                              
                                                                            
                                                                            >         ~~~javascript
                                                                            
                                                                            if (el && el.style) {  
                                                                            
                                                                            >           if (aktion != 'aus') {
                                                                            
                                                                            

                                                                            aktion enthält 'box1', das ist <> 'aus', also wird die folgende Zeile ausgeführt, also ausgeblendet, egal, wie der erste Parameter lautet.

                                                                            ~~~javascript

                                                                            el.style.display = 'block';

                                                                            } else {
                                                                                       el.style.display = 'none';
                                                                                    }
                                                                                  }
                                                                                }
                                                                              }
                                                                            }

                                                                            
                                                                            >   
                                                                            > Ach so… ich hab mal box3 und box4 den platz  tauschen lassen.  
                                                                            >   
                                                                            > `<a href="#" onclick="blocks_an_aus ('an','box1','box2','box4','box3') ;return false">Test</a>`{:.language-javascript}  
                                                                            >   
                                                                            > dann erschien box3 nicht.  
                                                                              
                                                                            Genau, damit wird ja auch 'box4' zu arguments[3], und wird verwendet und 'box3'zu arguments[4], was nie verwendet wird.  
                                                                              
                                                                            Wenn der Aufruf der Funktion so erfolgt: `blocks_an_aus ('an','box1','box2','box3','box4') ;`{:.language-javascript}, dann muss in der Funktionsdefinition auch „aktion” der erste Parameter sein. Dann sollte die Funktionsdefinition vielleicht so aussehen: `function blocks_an_aus (aktion)`{:.language-javascript}. Mich stört daran allerdings, dass es nicht ersichtlich ist, dass noch mehr Parameter benötigt werden. Bei `function blocks_an_aus (aktion, MyId)`{:.language-javascript}, was auch möglich wäre, ist immer noch nicht ersichtlich, dass es auch noch mehr Parameter mit Ids sein dürfen.  
                                                                              
                                                                            Die Schleife könnte ganz einfach so aussehen: `for (var i = 1; i < blocks_an_aus.arguments.length; i++)`{:.language-javascript}.  
                                                                              
                                                                            
                                                                            >   
                                                                            > Grüsse  
                                                                            > Insomnia  
                                                                            >   
                                                                            
                                                                            Auf Wiederlesen  
                                                                            Detlef  
                                                                            
                                                                            -- 
                                                                            - Wissen ist gut  
                                                                            - Können ist besser  
                                                                              
                                                                            - aber das Beste und Interessanteste ist der Weg dahin!
                                                                            
                                                                            1. [latex]Mae  govannen![/latex]

                                                                              ich hätte angenommen, Kai kümmert sich auch weiter zu Problemen mit seinem Lösungsvorschlag.

                                                                              Ein Grund, weshalb sämtliche Foren und Boards niemals so bedienfreundlich sein werden wie Usenet: Dort kann ich im Client bestimmte Beiträge wieder auf ungelesen setzen, oder auf halten, solange ich will und vieles mehr. Hier hingegen vergesse ich einiges, weil man die "gelesen" Markierung nicht wieder rückgängig machen kann :(

                                                                              [Erklärung]

                                                                              Die Schleife könnte ganz einfach so aussehen: for (var i = 1; i < blocks_an_aus.arguments.length; i++).

                                                                              Es ist zwar im konkreten Fall eher theoretisch, da hier der Performance-Unterschied zu vernachlässigen ist, aber um Insomnia den Unterschied der Schleifen-Schreibweise zu erklären:

                                                                              (ich schreibe hier als Variable für das Array einfach generisch 'array' und nicht 'arguments', da das folgende für alle Array gilt)

                                                                              for (var i = 1; i < array.length; i++)

                                                                              Hier wird in jedem Durchlauf array.length und dessen Größen-Verhältnis zu i neu ermittelt.

                                                                              for (var i = 1, l = array.length; i < l; i++)

                                                                              Hier werden die beiden Variablen i und l initialisiert und l wird der Wert von array.length zugewiesen. Im Durchlauf wird nur noch der Wert von l verwendet und mit i verglichen. Dies ist vielleicht interessant zu wissen, wenn man mit Schleifen arbeiten will, die mehrere tausend Durchläufe benötigen.
                                                                              Dies funktioniert allerdings nur bei Schleifen, in denen die Anzahl der Array-Elemente nicht verändert wird.

                                                                              Die von Insomnia verwendete Schreibweise war im konkreten Fall also ebenfalls korrekt, nur das arguments.length-1 muß zu arguments.length geändert werden, wie du korrekt erklärt hast.

                                                                              Cü,

                                                                              Kai

                                                                              --
                                                                              Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
                                                                              selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
                                                                              1. Grüss euch,

                                                                                gut dann werde ich das Script so testen wie besprochen.

                                                                                Ich melde mich dann und gebe bescheit.

                                                                                Grüsse
                                                                                Insomnia

                                                                                1. Grüss euch...

                                                                                  wollte nur kurz bescheit geben kann das mit dem Skript erst So. abend testen...

                                                                                  Hab euch also nicht vergessen.

                                                                                  Grüsse
                                                                                  Insomnia

                                                                                  1. Hallo Ihr beiden... 1000 mal sorry...

                                                                                    hab hier mit einem 3D Projekt so viel um die Ohren das ich schlicht nicht die zeit gefunden habe das ganze am So. in ruhe zu Teste.

                                                                                    Also zum scrip:

                                                                                    Es klappt ganz wunderbar... alles wird geöffnet wie es soll.

                                                                                    Jetzt stellt sich die nächste Hürde bei klick auf "X" oder "Schliessen" sollte alles wieder unsichtbar werden, was bis lang noch nicht geschieht.

                                                                                    Die butten müssten wie folgt aussehen...

                                                                                    <a href="#" onclick="blocks_an_aus('an','box01','box02','box03','box04');return false">schliessen</a>

                                                                                    <a href="#"><img src="../pic/x.gif" width="11" height="11" border="0" onclick="blocks_an_aus('an','box01','box02','box03','box04') ;return false" /></a>

                                                                                    und unser Script bis dato:

                                                                                    function blocks_an_aus (myIds, aktion) {  
                                                                                      if (document.getElementById) {  
                                                                                       for (var i = 1; i < blocks_an_aus.arguments.length; i++){  
                                                                                       var el = document.getElementById (arguments[i]);  
                                                                                            if (el && el.style) {  
                                                                                              if (aktion != 'aus') {  
                                                                                               el.style.display = 'block';  
                                                                                            } else {  
                                                                                               el.style.display = 'none';  
                                                                                            }  
                                                                                          }  
                                                                                        }  
                                                                                      }  
                                                                                    }
                                                                                    

                                                                                    Ich danke euch sehr für die unterstüzung.
                                                                                    Insomnia

                                                                                    1. Hallo Insomnia

                                                                                      Die butten müssten wie folgt aussehen...

                                                                                      <a href="#" onclick="blocks_an_aus('an','box01','box02','box03','box04');return false">schliessen</a>

                                                                                      'an' sollte doch für öffnen stehen.

                                                                                      <a href="#"><img src="../pic/x.gif" width="11" height="11" border="0" onclick="blocks_an_aus('an','box01','box02','box03','box04') ;return false" /></a>

                                                                                      Nochmal 'an' für öffnen?
                                                                                      Außerdem - Wenn du den Eventhandler (onclick) in dem <img> notierst, brauchst du keinen Link drumrum. In allen halbwegs aktuellen Browsern kannst du onclick fast jedem Element direkt zuweisen.

                                                                                      und unser Script bis dato:

                                                                                      function blocks_an_aus (myIds, aktion) {

                                                                                      if (document.getElementById) {
                                                                                         for (var i = 1; i < blocks_an_aus.arguments.length; i++){
                                                                                         var el = document.getElementById (arguments[i]);
                                                                                              if (el && el.style) {
                                                                                                if (aktion != 'aus') {
                                                                                                 el.style.display = 'block';
                                                                                              } else {
                                                                                                 el.style.display = 'none';
                                                                                              }
                                                                                            }
                                                                                          }
                                                                                        }
                                                                                      }

                                                                                        
                                                                                      Schau dir das Script genau an, besonders die Funktionsdefinition (1.Zeile) dann lies noch einmal ganz aufmerksam, [was ich dir bereits geschrieben habe](https://forum.selfhtml.org/?t=175548&m=1158706).  
                                                                                        
                                                                                        
                                                                                        
                                                                                      Auf Wiederlesen  
                                                                                      Detlef  
                                                                                      
                                                                                      -- 
                                                                                      - Wissen ist gut  
                                                                                      - Können ist besser  
                                                                                        
                                                                                      - aber das Beste und Interessanteste ist der Weg dahin!
                                                                                      
                                                                                      1. Hallo Detlef,

                                                                                        Du hast natürlich vollkommen Recht da sollte nicht "an" sondern "aus"
                                                                                        stehen... ich hab den Teil zischen der Klammern einfach einkopiert und in der eile vollkommen vergessen das zu ändern.

                                                                                        <a href="#" onclick="blocks_an_aus('aus','box01','box02','box03','box04');return false">schliessen</a>

                                                                                        <img src="../pic/x.gif" width="11" height="11" border="0" onclick="blocks_an_aus('aus','box01','box02','box03','box04') ;return false" />

                                                                                        function blocks_an_aus (action, myIds) {
                                                                                           if (document.getElementById) {
                                                                                            for (var i = 1; i < blocks_an_aus.arguments.length; i++){
                                                                                            var el = document.getElementById (arguments[i]);
                                                                                                 if (el && el.style) {
                                                                                                   if (aktion != 'aus') {
                                                                                                    el.style.display = 'block';
                                                                                                 } else {
                                                                                                    el.style.display = 'none';
                                                                                                 }
                                                                                               }
                                                                                             }
                                                                                           }
                                                                                         }

                                                                                        KLASSE geht alles wie es soll!!! Ich danke euch vielmals für eure Hilfe und besonders dir Detlef für dein durchhalte vermögen und deine Geduld. Hat mir wirklich viel gebracht!

                                                                                        Insomnia

                                                                              2. Hallo Kai

                                                                                Ein Grund, weshalb sämtliche Foren und Boards niemals so bedienfreundlich sein werden wie Usenet: Dort kann ich im Client bestimmte Beiträge wieder auf ungelesen setzen, oder auf halten, solange ich will und vieles mehr.

                                                                                Usenet kenne ich nicht.

                                                                                Hier hingegen vergesse ich einiges, weil man die "gelesen" Markierung nicht wieder rückgängig machen kann :(

                                                                                Eine Sache der Organisation.
                                                                                Ungelesene Antworten auf meine Postings finde ich immer sofort. Wenn ich sie dann gelesen habe und nicht gleich antworten kann oder will, lasse ich den Tab erstmal offen. Wenn ich befürchten muss, diese eventuell zu übersehen, setze ich ein Bookmark (was nach der Beantwortung natürlich wieder gelöscht wird).
                                                                                Eine Möglichkeit, die „gelesen Markierung” bei Bedarf wieder zu entfernen, könnte dies natürlich sehr vereinfachen.

                                                                                Die Schleife könnte ganz einfach so aussehen: for (var i = 1; i < blocks_an_aus.arguments.length; i++).

                                                                                Es ist zwar im konkreten Fall eher theoretisch, da hier der Performance-Unterschied zu vernachlässigen ist, …

                                                                                Nur hier?

                                                                                Hier werden die beiden Variablen i und l initialisiert und l wird der Wert von array.length zugewiesen. Im Durchlauf wird nur noch der Wert von l verwendet und mit i verglichen. Dies ist vielleicht interessant zu wissen, wenn man mit Schleifen arbeiten will, die mehrere tausend Durchläufe benötigen.

                                                                                Wie zeitaufwendig ist die Ermittlung von array.length überhaupt?
                                                                                Ist das wirklich erheblich?

                                                                                Ich habe mal einen klitzekleinen Test gemacht (Array mit 100000 Elementen).
                                                                                for (var i = 0, l = Liste.length; i < l; i++) ist auf meinem Rechner (Athlon XP 2400+ 2000MHz) bei mehreren Aufrufen -1 bis 32ms (IE6), 0 bis 32ms (alter Gecko), -2 bis 4ms (FF3) schneller als for (var i = 0; i < Liste.length; i++).

                                                                                Dies funktioniert allerdings nur bei Schleifen, in denen die Anzahl der Array-Elemente nicht verändert wird.

                                                                                Von Zeit zu Zeit gibt es hier Fragen, zu Problemen, die genau dadurch entstehen, dass nicht bedacht wurde, wie sich array.length beim Hinzufügen oder Entfernen von Elementen ändert.

                                                                                Die von Insomnia verwendete Schreibweise war im konkreten Fall also ebenfalls korrekt, nur das arguments.length-1 muß zu arguments.length geändert werden, wie du korrekt erklärt hast.

                                                                                Wahr doch wohl zu erwarten, dass Insomnia der Fehler in deinem Vorschlag nicht auffallen wird. ;)

                                                                                Auf Wiederlesen
                                                                                Detlef

                                                                                --
                                                                                - Wissen ist gut
                                                                                - Können ist besser
                                                                                - aber das Beste und Interessanteste ist der Weg dahin!
                                                                                1. [latex]Mae  govannen![/latex]

                                                                                  Die von Insomnia verwendete Schreibweise war im konkreten Fall also ebenfalls korrekt, nur das arguments.length-1 muß zu arguments.length geändert werden, wie du korrekt erklärt hast.

                                                                                  Wahr doch wohl zu erwarten, dass Insomnia der Fehler in deinem Vorschlag nicht auffallen wird. ;)

                                                                                  Nein, bei seinem Wissenstand noch nicht. Aber er ist ja zum Lernen hier ;)
                                                                                  Tja, man sollte eine Schleife (mit Startwert i=0) eben nicht nachträglich umschreiben (Startwert i=1), ohne alle relevanten Stellen zu ändern danach noch mal zu kontrollieren.

                                                                                  Cü,

                                                                                  Kai

                                                                                  --
                                                                                  Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
                                                                                  selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
                                                                      2. Hallo Kai

                                                                        Zuerst scheint meine Version sicherlich wesentlich komplizierter zu sein, aber andererseits ist sie durch weniger Code innerhalb der Funktion auch wieder einfacher. Es ist also eigentlich nur eine Frage, wie gut oder schlecht jemand die eine oder andere Variante verstehen und nachvollziehen kann.

                                                                        Auch, wenn der Code innerhalb einer Funktion nicht unnötig verkompliziert werden sollte, halte ich es für wichtiger, dass der Aufruf einfach und eindeutig definiert ist.

                                                                        ...meinst, daß die Funktion im ersten Parameter alle ids enthält, die eingeblendet werden und im zweiten Parameter alle ids, die ausgeblendet werden, jeweils als ein String mit z.B. leerzeichen?

                                                                        Ja

                                                                        Mit Strings:

                                                                        Aufruf:
                                                                        blocks_an_aus('box1 box2 box4','box3 box5');

                                                                        mit Objekt-Literal:

                                                                        Aufruf:

                                                                        var idliste = {
                                                                          box1: "an",
                                                                          box2: "an",
                                                                          box3: "aus",
                                                                          box4: "an",
                                                                          box5: "aus"
                                                                        };

                                                                        blocks_an_aus(id_liste);

                                                                          
                                                                        Die Funktion ist zwar etwas kürzer.  
                                                                        Ist der Aufruf aber einfacher praktikabler und verständlicher?  
                                                                          
                                                                        Ich würde dann auch nicht krampfhaft alles in eine Funktion quetschen sondern eine Funktion verwenden, die die bisherige Funktion einmal mit 'aus' und einmal mit 'an' aufruft.  
                                                                          
                                                                        
                                                                        > Ich würde das für meinen Einsatz noch optimieren und strengere Überprüfungen nutzen: (das ist für Anfänger natürlich nicht mehr geeignet)  
                                                                          
                                                                        Nur befinden wir uns in einem Thread, wo es genau darum geht, einem Anfänger eine für ihn einfach zu verwendende und verständliche funktionierende Funktion zu entwickeln.  
                                                                          
                                                                          
                                                                        Auf Wiederlesen  
                                                                        Detlef  
                                                                        
                                                                        -- 
                                                                        - Wissen ist gut  
                                                                        - Können ist besser  
                                                                          
                                                                        - aber das Beste und Interessanteste ist der Weg dahin!
                                                                        
                                                                        1. [latex]Mae  govannen![/latex]

                                                                          Mit Strings:
                                                                          Aufruf:
                                                                          blocks_an_aus('box1 box2 box4','box3 box5');

                                                                          mit Objekt-Literal:
                                                                          Aufruf:

                                                                          var idliste = {
                                                                            box1: "an",
                                                                            box2: "an",
                                                                            box3: "aus",
                                                                            box4: "an",
                                                                            box5: "aus"
                                                                          };
                                                                          blocks_an_aus(id_liste);

                                                                          
                                                                          >   
                                                                          > Die Funktion ist zwar etwas kürzer.  
                                                                          > Ist der Aufruf aber einfacher praktikabler und verständlicher?  
                                                                            
                                                                          Ich persönlich finde das schon. Man sieht im Literal sofort in lesbarer Form die Zuweisung für die jeweilige id. Bei der ersten Variante muß man immer wissen, in welcher Reihenfolge die Parameter erwartet werden, außerdem muß man, wenn man die Gruppierung der an/aus-Elemente ändern will, die id aus dem einen String entfernen und in anderen String wieder einfügen. Beim Literal ändert man einfach "an" zu "aus" bzw "aus" zu "an" und ist fertig.  
                                                                            
                                                                          
                                                                          > > Ich würde das für meinen Einsatz noch optimieren und strengere Überprüfungen nutzen: (das ist für Anfänger natürlich nicht mehr geeignet)  
                                                                          >   
                                                                          > Nur befinden wir uns in einem Thread, wo es genau darum geht, einem Anfänger eine für ihn einfach zu verwendende und verständliche funktionierende Funktion zu entwickeln.  
                                                                            
                                                                          Na und? Wahrscheinlich lesen hier auch Andere mit oder stoßen später einmal über die Suche auf diesen Thread. Außerdem habe ich absichtlich \_zusätzlich\_ eine nicht-optimierte Variante zum einfacheren Verständnis geschrieben, daher muß die optimierte Variante von jemandem, der sie nicht versteht, gar nicht beachtet werden bzw. kann derjenige notfalls auch nachfragen.  
                                                                            
                                                                          Cü,  
                                                                            
                                                                          Kai
                                                                          
                                                                          -- 
                                                                          Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul  
                                                                            
                                                                          selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
                                                                          
                                                                          1. Hallo Kai

                                                                            Ich persönlich finde das schon. Man sieht im Literal sofort in lesbarer Form die Zuweisung für die jeweilige id.

                                                                            Allerdings wird die Funktionsdefinition eher nichtssagend. Sie erwartet ein Objekt, was dieses enthält, oder wie es aufgebaut ist, erschließt sich erst anhand zusätzlicher Kommentare oder der Funktion selbst.

                                                                            Bei der ersten Variante muß man immer wissen, in welcher Reihenfolge die Parameter erwartet werden, …

                                                                            Das steht direkt in der Funktionsdefinition, zumindest diese sollte man sich anschauen, wenn man die Funktion verwenden will.

                                                                            außerdem muß man, wenn man die Gruppierung der an/aus-Elemente ändern will, die id aus dem einen String entfernen und in anderen String wieder einfügen. Beim Literal ändert man einfach "an" zu "aus" bzw "aus" zu "an" und ist fertig.

                                                                            Markieren, Strg + X, Strg + V ist das wirklich wesentlich aufwendiger?

                                                                            Es hängt davon ab, wofür es sein soll. Wenn ich eine Funktion benötige, die in umfangreicheren Javascripts verwendet werden soll, wo die aus- oder einzublendenden Elemente auch per Script bestimmt werden sollen, dann wäre es nicht so toll, ständig innerhalb eines Strings einzelne Teile zu ändern, oder überhaupt die Liste erst als String zusammenzubauen, nur um sie innerhalb der Funktion wieder auseinanderzunehmen. Für eine einfache Funktion, die direkt im HTML einem onclick zugewiesen werden soll, halte ich die Stringvariante am geeignetsten.

                                                                            Auf Wiederlesen
                                                                            Detlef

                                                                            --
                                                                            - Wissen ist gut
                                                                            - Können ist besser
                                                                            - aber das Beste und Interessanteste ist der Weg dahin!
                                                                            1. [latex]Mae  govannen![/latex]

                                                                              Ich persönlich finde das schon. Man sieht im Literal sofort in lesbarer Form die Zuweisung für die jeweilige id.

                                                                              Allerdings wird die Funktionsdefinition eher nichtssagend. Sie erwartet ein Objekt, was dieses enthält, oder wie es aufgebaut ist, erschließt sich erst anhand zusätzlicher Kommentare oder der Funktion selbst.

                                                                              Bei der ersten Variante muß man immer wissen, in welcher Reihenfolge die Parameter erwartet werden, …

                                                                              Das steht direkt in der Funktionsdefinition, zumindest diese sollte man sich anschauen, wenn man die Funktion verwenden will.

                                                                              Bei der einen Variante muß man das Format des Objektes aus dem Funktions-Kommentar ablesen, bei der Anderen die Reihenfolge der Parameter, das tut sich also nicht wirklich was.

                                                                              Für eine einfache Funktion, die direkt im HTML einem onclick zugewiesen werden soll, halte ich die Stringvariante am geeignetsten.

                                                                              Ja, das ist richtig, da wäre es vorteilhaft.

                                                                              Da ich die Events nur im Javascript vergebe, brauche ich mir darüber aber keine Gedanken machen *fg*

                                                                              Cü,

                                                                              Kai

                                                                              --
                                                                              Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
                                                                              selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
                                                      2. Hallo Insomnia,

                                                        Nachmittag wahr wohl nicht, ist schon wieder reichlich später Abend.

                                                        Kein guter Tag für mich… das ganze hat was von "Sag es in Chinesisch", ich weiss zwar was ich sagen möchte, aber ich kann es nicht in die richtigen Worte fassen.

                                                        Das kenne ich und geht mir oft ähnlich, dann schreibe ich, lese es durch, formuliere noch einmal anders, lese nochmal … und wenn es dann endlich abgeschickt ist, stelle ich fest, dass ich mich trotz (oder vielleicht gerade durch) das mehrmalige Ändern bescheuert oder missverständlich ausgedrückt habe.

                                                        Es ist offenbar doch so das wir if / else benötigen um dem Script leben einzuhauchen.

                                                        Leben einhauchen trifft es vielleicht nicht ganz.
                                                        Wir können damit die Programmausführung steuern.
                                                        Wenn die Bedingung zutrifft (wahr ergibt) - if (Bedingung) -, dann tue dies (führe die Befehle aus), ansonsten ( else ) tue dies (andere Befehle).
                                                        Das gilt dann jeweils für den direkt nachfolgenden Befehl es sei denn, durch geschweifte Klammern wird ein Block angegeben. Dann gilt es für alle Befehle in diesem Block.
                                                        Wir haben das in unserem bisherigen Script auch schon zwei mal getan. Die weitere Ausführung des Scripts haben wir einmal davon abhängig gemacht, ob die notwendige Funktion überhaupt zur Verfügung steht und dann davon, ob ein passendes Element gefunden wurde _und_ ob style bekannt ist.

                                                        Ich glaube verstanden zu haben das wir etwas vergleichen müssen, entweder mit == oder !=

                                                        Ja, == oder !=, je nachdem, ob die Bedingung wahr sein soll, wenn es übereinstimmt, oder eben _nicht_ übvereinstimmt.

                                                        Vielleicht muss man dazu unsere Parameter aktion nutzen, …

                                                        Ja, genau dafür haben wir ihn ja vorgesehen.

                                                        … in dem man ihr mit var einen sinn (wert) gibt …

                                                        Mit var wird kein Sinn gegeben, es sorgt dafür, dass innerhalb einer Funktion deklarierte Variablen lokal sind. Sie sind dann nur innerhalb der Funktion gültig und bekannt, dadurch können eventuelle gleichlautende globale Variablen oder gleichlautende Variablen in anderen Funktionen unabhängig von unserer existieren. (Variablen definieren)
                                                        Schau z.B. diese Zeile:
                                                        var el = document.getElementById (myId);
                                                        Hier haben wir var verwendet, weil wir die Variable nur innerhalb unserer Funktion brauchen. Dadurch verhindern wir, das es zu Problemen kommen könnte, wenn ein anderes Script eventuell auch eine Variable „el” verwenden würde.

                                                        Einen Wert hat die Variable „aktion” bereits, nämlich den, den wir als zweiten Parameter beim Aufruf übergeben haben.
                                                        OK, einen Sinn hat sie wirklich noch nicht, weil wir sie bisher noch nicht auswerten. Genau das wollen wir jetzt tun.

                                                        … der möglicherweise .style.display = 'block' oder nur 'block' sein könnte damit das dann in der if abfrage in funktionierenden bezug gebracht werden kann?

                                                        Oh, jetzt weiß ich nicht, ob ich dich falsch verstehe, du dich etwas verquer ausgedrückt hast, oder mit deinen Gedanken etwas auf dem Holzweg bist.

                                                        Wir wollen zum Anzeigen als zweiten Parameter „ein” verwenden und zum Ausblenden „aus”.

                                                        Da die Funktion nur die zwei Möglichkeiten kennt (Einblenden und Ausblenden), sparen wir uns die Prüfung, ob wirklich „ein” übergeben wurde, sondern lassen einfach einblenden, wenn nicht „aus” übergeben wurde.

                                                        Wäre das ganze also unterschiedlich != würde nach der if abfrage dies ausgeführt werden

                                                        Das würde dann so aussehen:

                                                        if (aktion != 'aus') {

                                                        el.style.display = 'block';

                                                        würde die abfrage aber übereinstimmen kommt...

                                                        else

                                                        Und damit es schön übersichtlich wird, mit eingeklammerten Blöcken:
                                                                    } else {

                                                        ins spiel und somit

                                                        el.style.display = 'none';

                                                        Und den Block wieder schließen:
                                                                    }

                                                        Ich kann nur sagen ich hab keine Ahnung ob das wenigstens im Ansatz richtig ist.

                                                        Sieht doch gut aus, und du schaffst es sicher, das an der richtigen Stelle im Script einzufügen.

                                                        Auf Wiederlesen
                                                        Detlef

                                                        --
                                                        - Wissen ist gut
                                                        - Können ist besser
                                                        - aber das Beste und Interessanteste ist der Weg dahin!
                                                        1. Hallo Detlef,

                                                          ich wünsche dir einen schönen Samstag.

                                                          Nun gar so weit ab vom eigentlichen Verständnis des Scripts war ich ja nicht.

                                                          Bei diesem Teil habe ich mich offenbar auf dem Holzweg befunden…

                                                          … der möglicherweise .style.display = 'block' oder nur 'block' sein könnte damit das dann in der if abfrage in funktionierenden bezug gebracht werden kann?

                                                          Ganz genau kann ich dir das sagen, wenn du mir folgendes noch mal verdeutlichst.

                                                          if (aktion != 'aus')

                                                          Mir ist nicht klar, woher „aktion“ weiss was „aus“ sein soll… wir haben „aktion“ doch nichts darüber gesagt. Woher weiss if dann also was –nicht- zutrifft.

                                                          Oder ist es so, dass „aus“ gar nicht klar definiert werden muss, da es erst hierdurch sein "wissen" erhält…

                                                          el.style.display = 'block';

                                                          Was ich zu sagen versuche ist…

                                                          Wenn „aus“ eine Sache darstellt die anders ist als

                                                          el.style.display = 'block';

                                                          dann kann es ja nur innerhalb unseres Scripts dieses sein

                                                          el.style.display = 'none';

                                                          Dann wäre „aus“ im Grunde "leer" bis zu dem Moment, in dem

                                                          el.style.display = 'block';

                                                          und

                                                          el.style.display = 'none';

                                                          ins Spiel kommen und die Frage nach deren Ungleichheit im Moment der Abfrage.

                                                          Weißt du was ich meine? Also um es noch mal auf dem Punkt zu bringen: Woher weiss „aus“ für was es steht.

                                                          Gut ich werde jetzt versuchen, das ganze Script und die Teile sinnvoll zusammen zu bringen.

                                                          Unser Script:

                                                          function block_ein_aus (myId, aktion) {  
                                                             if (document.getElementById) {  
                                                                var el = document.getElementById (myId);  
                                                                   if (el && el.style) {  
                                                                   }  
                                                                      if (aktion != 'aus') {  
                                                                         el.style.display = 'block';  
                                                            
                                                                      } else {  
                                                            
                                                                         el.style.display = 'none';  
                                                                      }  
                                                             }  
                                                          }  
                                                          
                                                          

                                                          Dazu möchte ich noch sagen, dass ich unschlüssig bin, ob die erste if Abfrage vor der nächsten geschlossen werden sollte… ich hab mich dafür entschieden, da es für mich in diesem Zusammenhang Sinn macht eine Frage zu stellen, diese zu klären und dann abzuschließen, bevor ich mich der nächsten zuwende.

                                                          Grüsse
                                                          Insomnia

                                                          1. Hallo Insomnia

                                                            ich wünsche dir einen schönen Samstag.

                                                            Den wünsche ich dir auch.

                                                            Ganz genau kann ich dir das sagen, wenn du mir folgendes noch mal verdeutlichst.

                                                            if (aktion != 'aus')

                                                            Mir ist nicht klar, woher „aktion“ weiss was „aus“ sein soll… wir haben „aktion“ doch nichts darüber gesagt. Woher weiss if dann also was –nicht- zutrifft.

                                                            Doch, wir sagen dies, allerdings nicht innerhalb der Funktion sondern beim Aufruf, genau so, wie wir auch nicht innerhalb der Funktion sagen, was myId enthalten soll, sondern beim Aufruf die Id des Elements angeben, das geändert werden soll.
                                                            Dazu schauen wir uns noch einmal die Funktionsdefinition an:

                                                            function block_ein_aus (myId, aktion)

                                                            Wir definieren zwei Variablen „myId” und „aktion”, die beim Start der Funktion jeweils den Wert enthalten, den wir beim Aufruf dieser als Parameter angegeben haben.

                                                            Oder ist es so, dass „aus“ gar nicht klar definiert werden muss, da es erst hierdurch sein "wissen" erhält…

                                                            Nein, wir rufen die Funktion mit zwei Parametern auf. Der erste (myId) sagt ihr, welches Element ein- oder ausgeblendet werden soll, der zweite Parameter (aktion) was sie tun soll, also entweder „ein” für Einblenden oder „aus” für Ausblenden.

                                                            Wenn der Aufruf der Funktion also so aussieht box_ein_aus ('info','aus'), dann enthält die Variable „myId” den Wert 'info' und die Variable „aktion” den Wert 'aus'.
                                                            Rufen wir sie mit box_ein_aus ('info','ein') auf, dann enthält „aktion” den Wert 'ein'.

                                                            Mit document.getElementById (myId) wird ein Element im Dokument gesucht, dessen Id mit dem in myId gespeicherten Wert (in dem Falle 'info') übereinstimmt, den wir beim Aufruf übergeben haben.
                                                            Mit if (aktion != 'aus') überprüfen wir dann, ob „aktion” nicht 'aus' enthält, also ob wir beim Aufruf der Funktion als zweiten Parameter etwas anderes als 'aus' übergeben haben.

                                                            Weißt du was ich meine? Also um es noch mal auf dem Punkt zu bringen: Woher weiss „aus“ für was es steht.

                                                            „aus” weiß das nicht. Wir haben festgelegt, dass wir „aus” als zweiten Parameter übergeben, wenn ausgeblendet werden soll. Wir hätten dafür auch „huggeldipumucje” festlegen können, nur wird man bei Verwendung des Scripts dann wohl jedesmal nachschlagen müssen, da erschien mir „aus” weitaus passender. ;)

                                                            Gut ich werde jetzt versuchen, das ganze Script und die Teile sinnvoll zusammen zu bringen.

                                                            Unser Script:

                                                            function block_ein_aus (myId, aktion) {

                                                            if (document.getElementById) {
                                                                  var el = document.getElementById (myId);
                                                                     if (el && el.style) {
                                                                     }
                                                                        if (aktion != 'aus') {
                                                                           el.style.display = 'block';

                                                            } else {

                                                            el.style.display = 'none';
                                                                        }
                                                               }
                                                            }

                                                            
                                                            >   
                                                            >   
                                                            > Dazu möchte ich noch sagen, dass ich unschlüssig bin, ob die erste `„if“`{:.language-javascript} Abfrage vor der nächsten geschlossen werden sollte… ich hab mich dafür entschieden, da es für mich in diesem Zusammenhang Sinn macht eine Frage zu stellen, diese zu klären und dann abzuschließen, bevor ich mich der nächsten zuwende.  
                                                              
                                                            Wenn der Block, der durch die geschweiften Klammern nach der Abfrage gebildet wird, nichts enthält, dann könnten wir uns die Abfrage auch gleich sparen, das if `(el && el.style)`{:.language-javascript} wäre praktisch wirkungslos.  
                                                            Die Funktion würde zwar auch so funktionieren. Sollte aber einmal kein Elemente mit der übergebenen Id existieren oder irgendein Browser keine Styles unterstützen, dann würde das Script mit einem Fehler abgebrochen.  
                                                            Es könnte z.B. passieren, dass jemand schon auf „Einblenden” klickt, wenn der Rest des Dokuments noch nicht fertig geladen ist, und deshalb das Element mit der entsprechenden Id noch nicht existiert.  
                                                              
                                                            Das Script sieht bis jetzt dann also so aus:  
                                                              
                                                            ~~~javascript
                                                            function block_an_aus (myId, aktion) {  
                                                              if (document.getElementById) {              // kennt der Browser dies  
                                                                var el = document.getElementById (myId);  // Referenz auf das Element holen und in el speichern  
                                                                  if (el && el.style) {                   // hat das geklappt und kennt el style, dann  
                                                                    if (aktion != 'aus') {                // wurde nicht "aus" übergeben, dann  
                                                                      el.style.display = 'block';         // display auf block setzen (Einblenden)  
                                                                    } else {                              // ansonsten  
                                                                      el.style.display = 'none';          // display auf none setzen (Ausblenden)  
                                                                    }  
                                                                  }  
                                                                }  
                                                              }  
                                                            }  
                                                            
                                                            

                                                            Falls noch Unklarheiten sind, dann frage noch einmal nach.

                                                            Wenn du bis hierher alles verstanden hast, dann können wir uns überlegen, wie wir die Funktion dahingehend erweitern können, dass wir nicht nur eine Id sondern eine Liste mit mehreren Ids übergeben können, um dann mehrere Elemente gleichzeitig ein- oder auszublenden.

                                                            Auf Wiederlesen
                                                            Detlef

                                                            --
                                                            - Wissen ist gut
                                                            - Können ist besser
                                                            - aber das Beste und Interessanteste ist der Weg dahin!
                                                            1. Hallo Detlef,

                                                              ich glaube eben ist der Groschen gefallen…

                                                              Ich mach hier mal ein nicht ganz ernstes Beispiel…

                                                              <a href="#" onclick="Vanilleeis ('Sahne','Schokososse');return false">Infos</a>

                                                              function Vanilleeis (myId, aktion) {  
                                                                if (document.getElementById) {  
                                                                  var el = document.getElementById (myId);   // myId wäre jetzt Sahne  
                                                                    if (el && el.style) {  
                                                                      if (aktion != 'Schokososse') {  
                                                                        el.style.display = 'block';  
                                                                      } else {  
                                                                        el.style.display = 'none';  
                                                                      }  
                                                                    }  
                                                                  }  
                                                                }  
                                                              }  
                                                              
                                                              

                                                              if (el && el.style)… das war mir so nicht klar, was aber aus jetziger sicht natürlich Sinn macht. Schlisse ich nach der ersten geschweiften Klammer gleich wieder ist die Frage Quasi unsinnig. Das der Sinn durch den Inhalt der geschweiften Klammern definiert wird war mir nicht klar.

                                                              Das wäre als würde ich frage:

                                                              Wie viel…

                                                              was an sich ja keine falsche frage ist, aber ohne Bezug wenig sinn macht.

                                                              Also… Wie viel Geld… Wie viel Schritte… Wie viel Meter…

                                                              Wenn meine etwas eigenwilligen Interpretationen stimmen, habe ich die gesamte Sache verstanden und wir können zur Erweiterung für die Id kommen.

                                                              Gruss
                                                              Insomnia

                                                              1. Hallo Insomnia,

                                                                if (el && el.style)… das war mir so nicht klar, was aber aus jetziger sicht natürlich Sinn macht. Schlisse ich nach der ersten geschweiften Klammer gleich wieder ist die Frage Quasi unsinnig. Das der Sinn durch den Inhalt der geschweiften Klammern definiert wird war mir nicht klar.

                                                                Wir sollten trennen. Die Frage selbst ist nicht unsinnig oder unvollständig, wir würden nur nicht darauf reagieren. Es nützt nichts, wenn ich eine Frage stelle, und dann weitermache, ohne die Antwort zu berücksichtigen.

                                                                In unserem Fall wäre es so, als ob ich frage: „Hey, stürze ich in den Abgrund, wenn ich hier einfach weitergehe?”. Dann latsche ich einfach weiter, egal welche Antwort ich bekomme.

                                                                Wenn meine etwas eigenwilligen Interpretationen stimmen, habe ich die gesamte Sache verstanden und wir können zur Erweiterung für die Id kommen.

                                                                Naja, nicht ganz. Ich denke aber, dass du es schon verstanden, nur nicht optimal formuliert hast.

                                                                Machen wir also weiter.

                                                                Das Script funktioniert erstmal so, wie es jetzt ist.
                                                                Wir wollen aber die Möglichkeit haben, nicht nur eine sondern mehrere Ids zu übergeben. Für jede weitere Id ein zusätzlicher Parameter wäre nicht wirklich toll, weil wir dann festlegen müssten, wie viele genau wir übergeben wollen.
                                                                Würden wir eine kleine Anzahl festlegen, müssten wir das Script wieder ändern, falls es doch einmal mehr werden. Außerdem müssten wir dann auch jeden Aufruf der Funktion anpassen.
                                                                Würden wir gleich eine große Anzahl festlegen, dann würden wir die gerade nicht benötigten Parameter trotzdem jedesmal angeben müssen, wenn auch leer. Das würde dann vielleicht so aussehen:
                                                                <a href="#" onclick="[code lang=javascript]block_ein_aus ('info', '', '', '', '', '', '', '', '', 'ein');return false">Infos</a>[/code]
                                                                Die dazu notwendige Erweiterung im Script würde dabei auch nicht unbedingt übersichtlich und leicht verständlich.

                                                                Besser, wir suchen uns eine andere Lösung.
                                                                Überlegen wir wir mal:
                                                                Eine Id darf nicht alle Zeichen enthalten, auf jeden Fall _keine_ Leerzeichen.
                                                                Die Funktion bekommt die Id als Zeichenkette übergeben ('info'), und Zeichenketten dürfen auch Leerzeichen enthalten.
                                                                Wenn eine Zeichenkette (der Parameter den wir übergeben) auch Leerzeichen enthalten darf, Ids aber keine, was liegt da näher, als mehrere Ids durch Leerzeichen voneinander getrennt zu übergeben.

                                                                Wir werden mehrere Ids als eine durch Leerzeichen getrennte Liste übergeben (z.B. 'info x-butten'). So eine Liste könnte dann sowohl eine einzelne Id, genauso aber auch eine beliebige Anzahl von Ids enthalten.

                                                                Natürlich funktioniert unser Script bisher nur mit einer einzelnen Id, so dass wir uns überlegen müssen, wie wir aus der Liste dann wieder die einzelnen Ids herausbekommen.
                                                                Dazu schau dir mal split() an.
                                                                Dann brauchen wir noch eine Möglichkeit, in einer Schleife eine Id nach der anderen zu verwenden.
                                                                Dazu schau dir mal Schleifen mit "for" an.

                                                                Dir wird bestimmt eine Möglichkeit einfallen, wie wir dies beides für unser Script verwenden können.

                                                                Auf Wiederlesen
                                                                Detlef

                                                                --
                                                                - Wissen ist gut
                                                                - Können ist besser
                                                                - aber das Beste und Interessanteste ist der Weg dahin!
                                                                1. Guten morgen Detlef,

                                                                  ich wünsche dir einen guten start in die Woche.

                                                                  Okay… wir brauchen den befehl split() um dem script klar zu machen das eine aneinander hängende kette von Ids nicht eine sache ist sonder das diese auf vielen einzelnen Ids besteht. Und das wissen darüber speichert er dann in einem Array für die weiter Verarbeitung.

                                                                  Das glaube ich verstanden zu haben.

                                                                  Die „for“ schleife brauchen wir damit das script quasi durchzählen kann wie viel Ids denn nun vorliegen oder überhaupt erfassen kann das es mehr als eine Id ist. Dazu werden wir wohl das Hochzählen der for-schleife nutzen… ich denke so wie im Beispiel  i++ zum Hochzählen genutzt wurde.

                                                                  Was mir noch nicht klar ist, wie werden wir die schleife begrenzen… im Beispiel geschieht das ja über <=36, da wir aber keine obergrenze angeben möchten müssen wir dem ganzen sagen… da ist keine Id mehr also schleife genug geschleift…

                                                                  Vielleicht kommt ja hier auch wieder Split () mit einen infos aus dem Array…

                                                                  Ich denke grundlegend kann ich folgen…

                                                                  Ich bin gespannt wie s weiter geht.

                                                                  Grüsse
                                                                  Insomnia

                                                                  1. Hallo Insomnia

                                                                    Okay… wir brauchen den befehl split() um dem script klar zu machen das eine aneinander hängende kette von Ids nicht eine sache ist sonder das diese auf vielen einzelnen Ids besteht. Und das wissen darüber speichert er dann in einem Array für die weiter Verarbeitung.

                                                                    Ja, ein wenig sollten wir aber Abstrahieren. Für uns ist es eine Liste von Ids, weil wir es so festgelegt haben. Für split() ist es einfach eine Zeichenkette, ein String, der jeweils beim Trennzeichen (dem Leerzeichen) geteilt wird, und die einzelnen Teile jedes einzeln in ein Element eines Arrays eingetragen wird.
                                                                    Aus _einer_ Zeichenkette wird eine Reihe von Zeichenketten, die jeweils einen Teil enthalten.

                                                                    Die „for“ schleife brauchen wir damit das script quasi durchzählen kann wie viel Ids denn nun vorliegen oder überhaupt erfassen kann das es mehr als eine Id ist. Dazu werden wir wohl das Hochzählen der for-schleife nutzen… ich denke so wie im Beispiel  i++ zum Hochzählen genutzt wurde.

                                                                    Ja, genau.
                                                                    Und weil i dabei so schön hochgezählt wird, können wir auch bei jedem Schleifendurchlauf eindeutig genau ein Element des Arrays ansprechen. Dazu müssen wir nur bei 0 mit dem Zählen beginnen, weil das erste Arrayelement genau diesen Index hat.

                                                                    Was mir noch nicht klar ist, wie werden wir die schleife begrenzen… im Beispiel geschieht das ja über <=36, da wir aber keine obergrenze angeben möchten müssen wir dem ganzen sagen… da ist keine Id mehr also schleife genug geschleift…

                                                                    Das Beispiel zu [link:http://de.selfhtml.org/javascript/objekte/string.htm#split@title=split()] zeigt auch die Anzahl der Wörter an. Dazu wird eine Eigenschaft verwendet, die jedes Array hat: length. Jedes Array weiß selbst, wie lang es ist, wir müssen es nur richtig fragen.

                                                                    Ich bin gespannt wie s weiter geht.

                                                                    Wir wissen jetzt, dass wir die einzelnen Ids aus dem übergebenen String (unserer Id-Liste) mit split() schön einzeln in ein Array bekommen.
                                                                    Wir wissen auch, dass wir mit for einen Befehl oder Block mit Befehlen genau so oft ausführen lassen können, wie wir wollen.
                                                                    Außerdem können wir durch unsere Zählvariable i bei jedem Schleifendurchlauf nacheinander jedes Arrayelement einzeln ansprechen.

                                                                    Mit dem Wissen ist es nicht schwer unser Script zu erweitern:

                                                                      
                                                                    function blocks_an_aus (myIds, aktion) { // die Funktion und den Parameter sollten wir umnennen,  
                                                                                                             // damit gleich zu sehen ist,  
                                                                                                             // dass es auch mehrere sein können  
                                                                      
                                                                      if (document.getElementById) {  
                                                                      
                                                                        var IdArr = myIds.split(" ");       // myIds in das Array IdArr splitten  
                                                                                                            // IdArr enthält jetzt in jedem Element genau eine Id  
                                                                      
                                                                        for (var i = 0; i < IdArr.length; i++) { // i auf 0 setzen,  
                                                                                                                 // bei jedem Schleifendurchlauf um 1 erhöhen,  
                                                                                                                 // so lange i kleiner als die Anzal der Arrayelemente ist  
                                                                      
                                                                          var el = document.getElementById (IdArr[i]); // IdArr[i] ist das Arrayelement mit dem Idex i,  
                                                                                                                       // damit wird bei jedem Schleifendurchlauf  
                                                                                                                       // jeweils nach dem Element gesucht, dessen  
                                                                                                                       // Id der nächsten in unserer Liste entspricht  
                                                                      
                                                                          if (el && el.style) {  
                                                                            if (aktion != 'aus') {  
                                                                              el.style.display = 'block';  
                                                                            } else {  
                                                                              el.style.display = 'none';  
                                                                            }  
                                                                          }  
                                                                        }  
                                                                      }  
                                                                    }  
                                                                    
                                                                    

                                                                    So, damit kann unser Script ein und auch mehrer Elemente gleichzeitig aus- oder einblenden.

                                                                    Schau es dir an,
                                                                    frage nach, wenn dir irgendetwas noch nicht wirklich klar ist,
                                                                    teste es, und frage nach, wenn es sich noch anders verhält, als du es dir vorstellst.

                                                                    Noch ein paar Anmerkungen:
                                                                    Die Funktion ist nur für Elemente geeignet, die als Block angezeigt werden sollen (wie Beat anmerkte).
                                                                    Jemand, bei dem kein Javascript aktiv ist, wird die Info nie lesen können.

                                                                    Auf Wiederlesen
                                                                    Detlef

                                                                    --
                                                                    - Wissen ist gut
                                                                    - Können ist besser
                                                                    - aber das Beste und Interessanteste ist der Weg dahin!
                                                                    1. Klasse!!!

                                                                      ich denke ich kann dem ganzen flogen.

                                                                      Ich werd es gleich morgen ausprobieren, heute muss ich mich noch um ein projekt kümmern.

                                                                      Hat mir viel spass gemacht... Du warst ein klasse lehrer. ;o)

                                                                      Ich melde mich so oder so noch mal.

                                                                      Insomnia

                      2. "Amen, ich sage euch: So denn der Name einer Javascript-Funktion mit MM_ anfängt, könnt ihr so gut wie immer sicher sein, dass es sich um einen Versuch des gefallenen Engels handelt, euch mit schmeichelnder Zunge in den Abgrund des Verderbens zu locken."

                        Und sie gingen aus und predigten, man solle Buße tun, und trieben viele böse Geister aus und salbten viele Kranke mit Öl und machten sie gesund.