Announcement

Collapse
No announcement yet.

If Else Problem...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • If Else Problem...

    Bräuchte mal bitte Euro Hilfe bei folgender Funktion. Ich möchte eben Funktion hover das dies auf die angegebenen zwei Bedingungen reagiert, funktioniert aber leider net.

    if(window.navigator.systemLanguage && !window.navigator.language) {
    function hoverIE() {
    var t = 0;
    var LI = document.getElementById("Navigation").firstChild;
    do {
    if (sucheUL(LI.firstChild)) || (var t = 1){
    LI.onClick=einblenden;
    }
    else if (sucheUL(LI.firstChild)) || (var t = 0){
    LI.onClick=ausblenden;
    LI = LI.nextSibling;
    }
    while(LI);
    }

    function sucheUL(UL) {
    do {
    if(UL) UL = UL.nextSibling;
    if(UL && UL.nodeName == "UL") return UL;
    }
    while(UL);
    return false;
    }

    function einblenden() {
    var UL = sucheUL(this.firstChild);
    UL.style.display = "block";
    var t = 0;
    }
    function ausblenden() {
    sucheUL(this.firstChild).style.display = "none";
    var t = 1;
    }

    window.onload=hoverIE;
    }

  • #2
    Hi,

    dein ganzes Script enthält viele logische Fehler:

    Code:
    var t = 1
    Hiermit deklarierst du die lokale Variable t und initialisierst diese mit dem Wert 1. Damit überschreibst du also den Wert der Variable t innerhalb der If-Anweisungen. Außerdem setzt du die Variable t innerhalb der Funktionen einblenden/ausblenden nur lokal.

    Deine sucheUL Funktion erscheint mir auch etwas umständlich und unnötig. Versucht du damit getElementsByTagName() nachzubauen?
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

    Viele Grüße Novi

    Comment


    • #3
      Ja leider bin ich in sachen JS net so fit, die Funktion hatte bisher folgendes aussehen. Und ich versuche eben die onmouseover und onmouseout in ein onClick Ereignis umzumodeln:

      ursprünglicher code:

      if(window.navigator.systemLanguage && !window.navigator.language) {
      function hoverIE() {
      var LI = document.getElementById("Navigation").firstChild;
      do {
      if (sucheUL(LI.firstChild)) {
      LI.onmouseover=einblenden; LI.onmouseout=ausblenden;
      }
      LI = LI.nextSibling;
      }
      while(LI);
      }

      function sucheUL(UL) {
      do {
      if(UL) UL = UL.nextSibling;
      if(UL && UL.nodeName == "UL") return UL;
      }
      while(UL);
      return false;
      }

      function einblenden() {
      var UL = sucheUL(this.firstChild);
      UL.style.display = "block"; UL.style.backgroundColor = "silver";
      }
      function ausblenden() {
      sucheUL(this.firstChild).style.display = "none";
      }

      window.onload=hoverIE;
      }

      Comment


      • #4
        Dann musst du einfach nur eine Funktion dem onclick- Ereignis zuweisen, die entweder die Funktion einblenden() oder ausblenden() aufruft:

        [highlight=js]
        changeVisibilityState() {
        var UL = sucheUL(this.firstChild);
        if("block" == UL.style.display) {
        ausblenden(UL);
        } else {
        einblenden(UL);
        }
        }
        [/highlight]

        Am Besten übergibst du dann die Variable UL an die jeweils aufzurufende Funktion, damit sucheUl nicht jedes mal aufgerufen werden muss.

        Man könnte den aktuellen Status auch in einer Variablen speichern, wobei man dann wiederum eher eine Objekteigenschaft als eine globale Variable verwenden sollte.
        "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

        Viele Grüße Novi

        Comment


        • #5
          Gut, vielen Dank, ich verstehe deine Logik soweit, doch leider klappt das mit dem Einbau deiner Funktion bei mir in mein Script auch net...jedenfalls passiert da nix...Keine Ahnung warum aber wie gesagt bin nicht fit in JS und möchte auch nur gerne helfen??????

          Comment


          • #6
            Gibt es irgendeine Fehlermeldung? Hast du einen Link zu der Seite? Ich habe nämlich keine Lust zu raten! Es gibt so viele Möglichkeiten warum das nicht funktionieren könnte: Tippfehler, Syntaxfehler, die Funktionen einblenden/ausblenden nicht angepasst, ...
            "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

            Viele Grüße Novi

            Comment


            • #7
              Also es existiert der Code den ich jetzt unten anüge, aber eben soll das Öffnen der Menüs via onClick Ereignis passieren und das schliessen eben auch. Habe vielen Dank vorab für Deine Bemühungen.

              <html>



              <script type="text/javascript">
              if(window.navigator.systemLanguage && !window.navigator.language) {
              function hoverIE() {
              var LI = document.getElementById("Navigation").firstChild;
              do {
              if (sucheUL(LI.firstChild)) {
              LI.onclick=einblenden; LI.onclick=ausblenden;
              }
              LI = LI.nextSibling;
              }
              while(LI);
              }

              changeVisibilityState() {
              var UL = sucheUL(this.firstChild);
              if("block" == UL.style.display) {
              ausblenden(UL);
              } else {
              einblenden(UL);
              }
              }

              function einblenden() {
              var UL = sucheUL(this.firstChild);
              UL.style.display = "block";
              }
              function ausblenden() {
              sucheUL(this.firstChild).style.display = "none";
              }

              window.onload=hoverIE;
              }
              </script>




              <head>
              <title></title>

              </head>
              <body>
              <h1 id="Beispiel">Beispielmenü</h1>

              <div id="Rahmen"><ul id="Navigation">
              <li><a href="http://www.google.de">Seite 1</a></li>

              <li><a href="#Beispiel">Seite 2</a>
              <ul>
              <li><a href="http://www.google.de">Seite 2a</a></li>
              <li><a href="http://www.google.de">Seite 2b</a></li>
              </ul>
              </li>

              <li><a href="#Beispiel">Seite 3</a></li>

              <li><a id="aktuell" href="#Beispiel">Seite 4</a>
              <ul>
              <li><a href="http://www.google.de">Seite 4a</a></li>
              <li><a href="http://www.google.de">Seite 4b</a></li>
              <li><a href="http://www.google.de">Seite 4c</a></li>
              </ul>
              </li>

              <li><a href="http://www.google.de">Seite 5</a></li>
              </ul><div></div></div>

              </body>
              </html>

              Comment


              • #8
                Je nach Browser IE, Firefox gibt es Tools, mit denen man Javascript debuggen kann und so einen Fehler schnell(er) finden kann

                IE -> http://msdn.microsoft.com/de-de/libr...28(VS.85).aspx,
                http://www.microsoft.com/downloads/d...displaylang=en


                Firefox -> https://addons.mozilla.org/en-US/firefox/addon/60/
                Christian

                Comment


                • #9
                  Code:
                  <html>
                  
                  
                  
                  <script type="text/javascript">
                  function hoverIE() {
                  var LI = document.getElementById("Navigation").firstChild;
                  do {
                  if (sucheUL(LI.firstChild)) {
                  LI.onclick=changeVisibilityState;
                  }
                  LI = LI.nextSibling;
                  }
                  while(LI);
                  }
                  
                  function changeVisibilityState() {
                  var UL = sucheUL(this.firstChild);
                  if("block" == UL.style.display) {
                  ausblenden(UL);
                  } else {
                  einblenden(UL);
                  }
                  }
                  
                  function einblenden(UL) {
                  UL.style.display = "block";
                  }
                  function ausblenden(UL) {
                  UL.style.display = "none";
                  }
                  
                  function sucheUL(UL) {
                  do {
                  if(UL) UL = UL.nextSibling;
                  if(UL && UL.nodeName == "UL") return UL;
                  }
                  while(UL);
                  return false;
                  }
                  
                  window.onload=hoverIE;
                  </script>
                  
                  
                  
                  
                  <head>
                  <title></title>
                  
                  </head>
                  <body>
                  <h1 id="Beispiel">Beispielmenü</h1>
                  
                  <div id="Rahmen"><ul id="Navigation">
                  <li><a href="http://www.google.de">Seite 1</a></li>
                  
                  <li><a href="#Beispiel">Seite 2</a>
                  <ul>
                  <li><a href="http://www.google.de">Seite 2a</a></li>
                  <li><a href="http://www.google.de">Seite 2b</a></li>
                  </ul>
                  </li>
                  
                  <li><a href="#Beispiel">Seite 3</a></li>
                  
                  <li><a id="aktuell" href="#Beispiel">Seite 4</a>
                  <ul>
                  <li><a href="http://www.google.de">Seite 4a</a></li>
                  <li><a href="http://www.google.de">Seite 4b</a></li>
                  <li><a href="http://www.google.de">Seite 4c</a></li>
                  </ul>
                  </li>
                  
                  <li><a href="http://www.google.de">Seite 5</a></li>
                  </ul><div></div></div>
                  
                  </body>
                  </html>
                  Zur Qualität des Codes muss ich hoffentlich nichts sagen, aber es erfüllt deinen Änderungswunsch.
                  "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

                  Viele Grüße Novi

                  Comment


                  • #10
                    Ja habe vielen Dank Novi für deine SupaHilfe. Habe mir zwar eine Editor installiert aber es trotzdem net hinbekommen, naja sollte vllt. doch lieber bei .NET bleiben..

                    Eine Frage hätte ich noch, was wäre es für ein Aufwand wenn ich die offenen Menüpunkte schließen möchte sobald ich einen anderen Menüpunkt anklicke?

                    Comment


                    • #11
                      Du müsstest einfach nur in der Funktion einblenden() die Funktion ausblenden() für jedes UL-Element, das du vorher schließen möchtest, aufrufen.
                      "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

                      Viele Grüße Novi

                      Comment

                      Working...
                      X