Melanie: javascript an oder aus - anzeige anders..

guten abend,

ich traue mich jetzt mal mit einer frage in dieses forum und hoffe, nicht allzusehr geschimpft zu werden - bin noch relativer neuling.

ich hätte auf meiner seite gern ein horizontales flyout javascriptmenü, von dem nur die hauptmenüpunkte zu sehen sind, wenn javascript deaktiviert ist. mit noscript blende ich dann rechts ein modul mit den untermenüpunkten ein.

mein problem: meine module rechts sind immer abwechselnd rot und orange. das heißt je nach javascript an oder aus muss modul eins rot oder orange, modul zwei orange oder rot.. sein.

ich benutze das cms joomla.
ich habe es im template auf zwei verschiedene arten versucht:

<script type="text/javascript">document.write("<div class='moduletable-orange'>")</script>
<noscript><div class="moduletable-rot"> </noscript>

<?php mosLoadModules ( 'right',-2 ); ?></div>

hier funktioniert bei javascript an alles wunderbar, wenn es aus ist, greifen meine css-formatierungen nicht.

wenn ich es so mache:
<script type="text/javascript">document.write("<div class='moduletable-orange'><?php mosLoadModules ( 'right',-2 ); ?></div>")</script>

<noscript><div class="moduletable-rot"> <?php mosLoadModules ( 'right',-2 ); ?></div></noscript>

ist es genau anders herum. da funktionert noscript perfekt und script kriegts nicht hin.

was kann ich den machen um die eine oder andere möglichkeit zum laufen zu kriegen?

es wäre nett, wenn mir jemand helfen könnte.

danke, melanie

  1. Guten Morgen Melanie,

    bitte poste einen Verweis auf Dein Script, damit man sich Deinen HTML-Out ansehen kann.

    Gruß aus Berlin!
    eddi

    --
    Wer Rechtschreibfehler findet, darf sie behalten.
    1. guten morgen eddie,

      hier der link zur aktuellen seite, die das javascriptmenü noch nicht enthält.

      http://www.realschule-herrieden.de

      das modul "Auswahl" rechts soll nur eingeblendet werden, wenn javascript deaktiviert ist - das geht lokal schon.
      die anderen beiden module sollen dann die headerfarbe wechseln. das funktioniert nicht (oder immer nur halb).

      dass dies nicht funktioniert:

      <script type="text/javascript">document.write("<div class='moduletable-orange'><?php mosLoadModules ( 'right',-2 ); ?></div>")</script>

      kann es daran liegen, dass im html-output des php-strings Anführungszeichen auftauchen?

      1. guten morgen eddie,

        ^^
        bitte nicht gleich verweiblichen ;)

        Der Passus...

        <script type="text/javascript">document.write("<div class='moduletable-orange'>

        ...findet sich im referenzierten Dokument nicht.

        Gruß aus Berlin!
        eddi

        --
        Wer Rechtschreibfehler findet, darf sie behalten.
        1. OK, entschuldigung, ich wollte hier keine Geschlechtsumwandlung durchführen ;)

          Nochmal: Guten Morgen Eddi,

          die Seite hab ich im Moment leider nur lokal. So lange es nicht funkioniert, möchte ich es (verständlicherweise) nicht hochladen.

          Kann man, ohne das direkt zu sehen, nicht irgendwie erkennen, warum das nicht funktioniert? Hab ich irgendwo einen Fehler im Code?

          Irgendwie scheint der noscript-tag ja nicht zu machen, was ich gern möchte...
          oder gibt es eine Möglichkeit, anders abzufragen, ob Javascript aktiviert ist? Nach stundenlanger Suche hab ich nur die genannte Lösung gefunden.

          Gruß aus Middelfranggen, Melanie

          1. Re:

            die Seite hab ich im Moment leider nur lokal. So lange es nicht funkioniert, möchte ich es (verständlicherweise) nicht hochladen.

            Lade es einfach nicht als index.php hoch, sondern unter einem anderen Namen.

            Hab ich irgendwo einen Fehler im Code?

            • so zumindest meine Vermutung.

            Gruß aus Berlin!
            eddi

            --
            Wer Rechtschreibfehler findet, darf sie behalten.
            1. Lade es einfach nicht als index.php hoch, sondern unter einem anderen Namen.

              geht ja leider nicht, da hängt ja mein cms dran. wenn es nicht index.php heißt, zeigt es halt nix an :(

              ich probiers jetzt mal nochmal so:

              hier die erste variante:

                
              <script type="text/javascript">document.write("<div class='moduletable-orange'>")</script>  
              <noscript><div class="moduletable-rot"> </noscript>  
                    <?php mosLoadModules ( 'right',-2 ); ?></div>
              

              ...mit Output:

                
              <script type="text/javascript">document.write("<div class='moduletable-orange'>")</script>  
              <noscript><div class="moduletable-rot"> </noscript>  
                
              <div class="moduletable">  
              <h3>Wer ist online?</h3>  
              <div>Aktuell ist 1 Gast online</div>  
              </div>  
              </div>
              

              Ergebnis: mit Javascript funktioniert es, ohne nicht.

              zweite variante:

                
              <noscript><div class="moduletable-rot">  
              <?php mosLoadModules ( 'user1',-2 ); ?> </div>  
              </noscript>  
              <script language="JavaScript">document.write("<div class='moduletable-rot'><?php mosLoadModules ( 'user1',-2 ); ?> </div>") </script>
              

              Output:

                
              <noscript><div class="moduletable-rot"> <div class="moduletable">  
              <h3>Helft mit!</h3>  
              <div align="left">Schickt uns Links und Witze<br />  
              <div align="center"><a href="mailto:webmaster@realschule-herrieden.de">E-Mail</a><br /></div></div></div> </div>  </noscript>  
                
              <script language="JavaScript">document.write("<div class='moduletable-rot'><div class="moduletable">  
              <h3>Helft mit!</h3>  
              <div align="left">Schickt uns Links und Witze<br />  
              <div align="center"><a href="mailto:webmaster@realschule-herrieden.de">E-Mail</a><br />  
              </div></div></div></div>") </script>
              

              Ergebnis:
              Mit Javascript aktiviert sieht man das Modul überhaupt nicht, ohne funktioniert es, wie es soll.

              ich hab das ganze jetzt ein kleines bisschen vereinfacht, hab noch einen umklammernden div und am Ende der Module jeweils ein weiteres mit dem Bottom-Bild. Daran wirds aber doch hoffentlich nicht liegen.

              Die erste Variante wäre mir natürlich deutlich lieber, weil meine index.php dann übersichtlicher bliebe.
              Funktioniert noscript nicht, weil im noscriptbereich das div nur geöffnet und nicht geschlossen wird? (<noscript><div class="moduletable-rot"> </noscript>)

              Naja, ich hoffe, du schaust dir den Wust kurz durch. Danke aber schonmal,
              Melanie

              1. Hi,

                ich versuch mich mal an einer Diagnose...

                hier die erste variante:

                ...mit Output:

                <script type="text/javascript">document.write("<div class='moduletable-orange'>")</script>
                <noscript><div class="moduletable-rot"> </noscript>

                <div class="moduletable">
                <h3>Wer ist online?</h3>
                <div>Aktuell ist 1 Gast online</div>
                </div>
                </div>

                
                > Ergebnis: mit Javascript funktioniert es, ohne nicht.  
                  
                Hier dürfte es an der Schachtelung der Elemente liegen. das </noscript> kommt vor dem </div> und zerstört damit die korrekte Schachtelung der Elemente.  
                  
                  
                
                > zweite variante:  
                  
                
                > Output:  
                > ~~~html
                  
                
                > <noscript><div class="moduletable-rot"> <div class="moduletable">  
                > <h3>Helft mit!</h3>  
                > <div align="left">Schickt uns Links und Witze<br />  
                > <div align="center"><a href="mailto:webmaster@realschule-herrieden.de">E-Mail</a><br /></div></div></div> </div>  </noscript>  
                >   
                > <script language="JavaScript">document.write("<div class='moduletable-rot'><div class="moduletable">  
                > <h3>Helft mit!</h3>  
                > <div align="left">Schickt uns Links und Witze<br />  
                > <div align="center"><a href="mailto:webmaster@realschule-herrieden.de">E-Mail</a><br />  
                > </div></div></div></div>") </script>
                
                

                Ergebnis:
                Mit Javascript aktiviert sieht man das Modul überhaupt nicht, ohne funktioniert es, wie es soll.

                Hier ist der String im Javascriptaufruf kaputt. Die doppelten Anführungszeichen bei den Attributen müssen einfache sein, so wie beim ersten DIV (also <div class='...'>).

                ich hab das ganze jetzt ein kleines bisschen vereinfacht, hab noch einen umklammernden div und am Ende der Module jeweils ein weiteres mit dem Bottom-Bild. Daran wirds aber doch hoffentlich nicht liegen.

                Sollte eigentlich kein Problem sein.

                Die erste Variante wäre mir natürlich deutlich lieber, weil meine index.php dann übersichtlicher bliebe.
                Funktioniert noscript nicht, weil im noscriptbereich das div nur geöffnet und nicht geschlossen wird? (<noscript><div class="moduletable-rot"> </noscript>)

                Ich denke ja.

                Gruß,

                Harlequin

                1. hallo harlequin

                  Hier ist der String im Javascriptaufruf kaputt. Die doppelten Anführungszeichen bei den Attributen müssen einfache sein, so wie beim ersten DIV (also <div class='...'>).

                  das heißt, wenn ich das mit den doppelten anführungszeichen nicht gebacken kriege, habe ich keine andere möglichkeit?

                  eine frage:
                  ginge es, dass ich im noscriptbereich eine php-variable erstelle ($javascript = "aus" oder so). geht sowas?

                  und dann hinterher per php-if/else abfrage und danach die klasse rot oder orange vergebe?

                  oder gibt es noch eine andere möglichkeit?

                  danke, melanie

                  1. hallo harlequin

                    Hier ist der String im Javascriptaufruf kaputt. Die doppelten Anführungszeichen bei den Attributen müssen einfache sein, so wie beim ersten DIV (also <div class='...'>).

                    das heißt, wenn ich das mit den doppelten anführungszeichen nicht gebacken kriege, habe ich keine andere möglichkeit?

                    Hm, wenn das Umwandeln der Anführungszeichen in ' oder auch in " (durch den Backslash davor beenden sie den String nicht mehr) nicht geht, muss ein anderer Ansatz gefunden werden.

                    eine frage:
                    ginge es, dass ich im noscriptbereich eine php-variable erstelle ($javascript = "aus" oder so). geht sowas?
                    und dann hinterher per php-if/else abfrage und danach die klasse rot oder orange vergebe?

                    Nicht ohne weiters, da der Noscript-bereich erst im Browser zum tragen kommt. Man könnte höchstens auf einer Startseite über Javascript den Wert eines <input type="hidden"> beeinflussen und diesen danach in PHP auswerten.

                    oder gibt es noch eine andere möglichkeit?

                    Da du scheinbar nur die Farbe ändern willst, wieso nicht einfach rot als default und per Javascript (Element.className) auf orange setzen? Falls zusätzlich noch elemente Auftauchen/Verschwinden sollen lässt sich mit Element.style.display auch dies erreichen.
                    (an Element kommt man z.B. mit document.getElementById("id_des_tags") )

                    Gruß,

                    Harlequin

                    1. Da du scheinbar nur die Farbe ändern willst, wieso nicht einfach rot als default und per Javascript (Element.className) auf orange setzen? Falls zusätzlich noch elemente Auftauchen/Verschwinden sollen lässt sich mit Element.style.display auch dies erreichen.
                      (an Element kommt man z.B. mit document.getElementById("id_des_tags") )

                      Das hört sich sehr interessant an. Leider bin ich, was Javascript betrifft, ein kompletter Anfänger. Mal schauen, ob ich da was hinkriege.

                      Danke auf jeden Fall für den Tipp.
                      Anderfalls muss ich halt schauen, ob ich die Coredateien insofern hacken kann, dass die doppelten Anführungszeichen einfache sind.

                      Nochmal vielen Dank für die Hilfe,
                      Melanie