JanE: style.display = "none" funktioniert nicht

Hallo,
ich möchte einen Div-Tag nach 3 Sekunden verschwinden lassen und zwar mit der anweisung "style.display = "none";". Aber das funktioniert bei mir nicht, Firefox und IE sagen mir immer: "none is undifined" dabei ist none bei mir doch ein String und kein Objekt... hier mal der Code ich hoffe ihr könnt mir helfen:

function menu(id)
  {
   var submenu = document.getElementById("sm_"+id);
   submenu.style.display = '';
   var menuClose = submenu.style.display = "none";
   setTimeout(menuClose, 3000);

}

cheers,
Jan

  1. hi,

    Firefox und IE sagen mir immer: "none is undifined" dabei ist none bei mir doch ein String und kein Objekt...

    Und eben das ist der Fehler.

    var menuClose = submenu.style.display = "none";
       setTimeout(menuClose, 3000);

    Was erwartet setTimeout() als ersten Parameter?
    Nein, kein "none".

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Was erwartet setTimeout() als ersten Parameter?
      Nein, kein "none".

      Klar kann ich den befehl zum Schließen in eine extra Funktion machen, aber wie übergeb ich da dann die id der div?

      function menu(id)
        {
         var submenu = document.getElementById("sm_"+id);
         submenu.style.display = '';
         setTimeout("menu_close(id)", 3000);

      }
        function menu_close(id)
        {
         var submenu = document.getElementById("sm_"+id);
         submenu.style.display = 'none';
        }

      1. manchmal hilft einfach nur nachdenken:
        setTimeout("menu_close("+id+")", 3000);

  2. Hallo JanE.

    Firefox und IE sagen mir immer: "none is undifined" dabei ist none bei mir doch ein String und kein Objekt...

    Eben, da liegt das Problem.

    var menuClose = submenu.style.display = "none";

    In dieser Zeile weist du sowohl der Variable menuClose als auch der Eigenschaft display vom Objekt submenu.style den Wert „none“ zu.
    Siehe folgendes:

    var a = b = 'Foo';  
    alert('a = ' + a + ', b = ' + b);
    

    Du musst dies also schon in eine separate Funktion packen, welche du dann in der setTimeout-Methode notierst.

    setTimeout(menuClose, 3000);

    Alternativ ist Übrigens auch folgendes möglich:

    setTimeout(function() {  
     /* Dein Code */  
    }, 3000);
    

    Einen schönen Mittwoch noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]