Olli: settimeout variable oder ohne funktionaufruf

Hallo,

Ich möchte mit settimeout eine verzögerte Reaktion
erzwingen. Das klappt auch so weit, wenn ich in
settimeout eine Funktion aufrufe und diese widerum
die Aktion ausführt.

Aber...
Sobald ich eine Variable mit übergeben will geht das nicht.
Also dachte ich mir:

1. Vielleicht kann settimeout auch Aktionen direkt ausführen
ohne erst eine Funktion aufrufen zu müssen.

oder

2. Die Variable müsste doch irgendwie mit zu übergeben
sein.

Leider klappen meine Ansätze aber nicht, weiss jemand Rat?

Beisp.
<div  onmouseover="child1.style.display='inline';" onmouseout="child1.style.display='none';">

<a class="nav" style="cursor:default;" href="#">Info</a>
<span id="child1" style="display:none;">
blablabla
</span>
</div>

Also ein Menu soll ein Untermenu öffnen und beim verlassen
wieder schliessen.

Allerdings zeitverzögert, daher:

function y()
{
document.getElementById('child2').style.display='none';
}
function x()
{
setTimeout('y()',2000);
}

... daher: onmouseout="x();

-------------
Hier muss ich aber die Id vorher festlegen.
Wenn ich es aber probiere die TagID mitzugeben gehts nicht:
function y(werty)
{
document.getElementById(werty).style.display='none';
}
function x(wertx)
{
setTimeout('y(werty)',2000);
}

.... onmouseout="x('child2');

#########################

Was kann ich tun?

Olli

  1. In den Diskussionen ?t=100670 und ?t=100729 werden verschiedene Ansätze genannt. Mir hat das weitergeholfen.

    Bis denn dann,

    Thomas

    1. Hallo Thomas,
      danke schön, das klappt so weit schon mal.

      window.setInterval(function xy() { myFunction("meinwert");}, 1000);

      Aber schönen Quelltext macht das nicht gerade,
      ist das wirklich die einzige Möglichkeit einen Wert zu übergeben?

      Gruss
      Olli

      1. Weiß ich leider nicht; ich habe das bisher so verwendet. Zum Beispiel in einer kleinen Funktion zum scrollen des Inhalts eines HTML-Elements:


        
        /**
         * set up interval (or stop it) to scroll an element (using the mover()-function)
         *
         * @param String elemId - id of HTML-element, that should be scrolled
         * @param int direction - the direction to scroll (0 => UP; 1 => DOWN)
         * @param boolean status - selects wether to start or stop the interval;
         *   ('true' on mouseover, 'false' on mouseout)
         */
        function scroll(elemId, direction, status, speed)
        {
         elem = document.getElementById(elemId);
         if(status == true) {
          // using anonymous function to send object as paramter, set interval-speed here
          activeScroller[elemId] = window.setInterval(function(){mover(elem, direction);}, 100);
         }
         else {
          window.clearInterval(activeScroller[elemId]);
         }
        }
        
        /**
         * scroll down an given HTML-element into direction by 10 Pixel
         *
         * @param Element elem - the given HTML-element (as JS-object)
         * @param int direction - the direction to scroll (0 => UP; 1 => DOWN)
         */
        function mover(elem, direction) {
         if(direction == 0) {
          elem.scrollTop -= 10;
         }
         else {
          elem.scrollTop += 10;
         }
        }
        
        

        
        <img src="arr_up.gif" alt="scroll up" onmouseover="scroll('mytextbox', 0, true);" onmouseout="scroll('mytextbox', 0, false);" />
        
        <img src="arr_down.gif" alt="scroll down" onmouseover="scroll('mytextbox', 1, true);" onmouseout="scroll('mytextbox', 1, false);" />
        
        

        Bis denn dann,

        Thomas

      2. window.setInterval(function xy() { myFunction("meinwert");}, 1000);

        Aber schönen Quelltext macht das nicht gerade,

        wenn du es nicht schön machst. Du kannst auch Variabeln dafür verwenden.

        var intervalFunc = function () { myFunction("meinwert");};
        window.setInterval( intervalFunc, 1000);

        Struppi.

        --
        Javascript ist toll (Perl auch!)