Kalle_B: Abort (control stack overflow).

Hallöle,

verstehe nicht, was da überläuft (Opera) bei

var obj_alt;  
function blinken( obj, art )  
{  
  if ( art == 1 )  
  {  
    if ( typeof(obj_alt) != 'undefined' ) obj_alt.style.backgroundColor = '#fff';  
    obj_alt = obj;  
  }  
  if ( obj.style.backgroundColor == '#ffc' ) obj.style.backgroundColor = '#fff'; else obj.style.backgroundColor = '#ffc';  
  window.setTimeout( blinken( obj_alt, 0 ), 500 );  
}  

...
<td class=co onClick="blinken(this,1)">
...
Bei Klick wird die Hintergrundfarbe des zuvor geklickten Objekts weiss und
die Hintergrundfarbe des geklickten Objekts hellgelb, blinkt aber nicht.

Ich kann mehrfach klicken, der Abort tötet also nicht den Eventhandler.

LG Kalle

  1. Hallo,

    verstehe nicht, was da überläuft (Opera) bei

    window.setTimeout( blinken( obj_alt, 0 ), 500 );

    http://de.selfhtml.org/javascript/objekte/window.htm#set_timeout@title=window.setTimeout() möchte eine Zeichenkette als ersten Parameter haben. Ich lege Dir den Artikel Komfortable Timer-Funktionen von molily und Struppi in SELFHTML aktuell ans Herz.

    Freundliche Grüße

    Vinzenz

    1. Hallo, Vinzenz,

      window.setTimeout( blinken( obj_alt, 0 ), 500 );

      http://de.selfhtml.org/javascript/objekte/window.htm#set_timeout@title=window.setTimeout() möchte eine Zeichenkette als ersten Parameter haben.

      Au ja, da stand ich auf dem Schlauch. Jetzt mache ich es so:
        window.setTimeout( "blinken( "+obj_alt+", 0 )", 500 );

      und es kommt eine andere Fehlermeldung:

      Error:
      name: ReferenceError
      message: Statement on line 1: Undefined variable: object
      Backtrace:
        Line 1 of unknown script
          blinken( [object HTMLTableCellElement], 0 )
      stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'

      kann man das Objekt, das ursprünglich mit this übergeben wurde, nicht speichern für die Timeout- Funktion?

      LG Kalle

      1. Hi,

        http://de.selfhtml.org/javascript/objekte/window.htm#set_timeout@title=window.setTimeout() möchte eine Zeichenkette als ersten Parameter haben.

        Oder die Referenz auf eine Funktion.

        Au ja, da stand ich auf dem Schlauch. Jetzt mache ich es so:
          window.setTimeout( "blinken( "+obj_alt+", 0 )", 500 );

        und es kommt eine andere Fehlermeldung:

        Error:
        name: ReferenceError
        message: Statement on line 1: Undefined variable: object
        Backtrace:
          Line 1 of unknown script
            blinken( [object HTMLTableCellElement], 0 )
        stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'

        Die Fehlermeldungen von Opera sind manchmal auch nicht die vielsagendsten.

        kann man das Objekt, das ursprünglich mit this übergeben wurde, nicht speichern für die Timeout- Funktion?

        Klar, kann man.
        Das andere Objekt, obj_alt, das hast du doch auch so zur Verfügung gestellt, dass es nicht bei jedem Aufruf übergeben werden muss ...

        Schöner wäre es allerdings, das ganze OO umzusetzen.
        Da wäre die zu speichernde HTML-Objekt-Referenz ein Attribut eines Objektes, auf dass die per setTimteout aufgerufene *Methode* dieses Objektes selbstverständlich Zugriff hat.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.