Markus Beierlein: window.setTimeout - Funktion in Funktion aufrufen

Hallo,

nach einem Klick soll erst ein Element entfernt werden und nach 2 Sekunden eine Funktion aufgerufen werden:

<a href=# onClick="self.parent.tb_remove();window.setTimeout("thickbox('/routenplaner.php',340,299,'iframe','false')", 2000);">Routenplaner</a>  

Die Fehlerkonsole meldet aber einen Syntax-Fehler.

Wie bekomme ich jetzt diese Funktion richtig formatiert in window.setTimeout rein?

thickbox('/routenplaner.php',340,299,'iframe','false')", 2000);

Danke,
Markus Beierlein

  1. Hi,

    <a href=# onClick="self.parent.tb_remove();window.setTimeout("thickbox('/routenplaner.php',340,299,'iframe','false')", 2000);">Routenplaner</a>

    
    >   
    > Die Fehlerkonsole meldet aber einen Syntax-Fehler.  
      
    der [Validator](http://validator.w3.org/) hätte Dir Ähnliches gesagt, weil ab einschließlich 'thickbox' Dein HTML-Code defekt ist. Im Event-Handler verbleibt der JavaScript-Code 'self.parent.tb\_remove();window.setTimeout('. Nebenbei bemerkt solltest Du unbedingt bei Deinem HTML-Code auf XHTML-Kompatibilität achten, wo immer es möglich ist - oder gleich auf XHTML umsteigen.  
      
    
    > Wie bekomme ich jetzt diese Funktion richtig formatiert in window.setTimeout rein?  
      
    Wenn Du einen Wert in einen Kontext bringst, musst Du den Wert kontextspezifisch kodieren. Bringst Du also beispielsweise JavaScript-Code in den Kontext eines HTML-Attributs, musst Du ihn gemäß diesen Kontextes HTML-kodieren.  
      
    Cheatah  
    
    -- 
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|  
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html  
    X-Will-Answer-Email: No  
    X-Please-Search-Archive-First: Absolutely Yes
    
    1. Nebenbei bemerkt solltest Du unbedingt bei Deinem HTML-Code auf XHTML-Kompatibilität achten, wo immer es möglich ist

      Warum, wenn ich HTML schreibe, schreibe ich HTML. Die Aussicht, es irgendwann nach XHTML umwandeln zu wollen, ist dann doch zu fern, um mir XHTML-kompatible Syntax in HTML 4 anzugewöhnen.

      oder gleich auf XHTML umsteigen.

      Warum? Das ist doch kein Automatismus, dass irgendwann alles gen XHTML strebt. Wer mit HTML gut fährt und bisher keine Vorteile darin sieht, auf XHTML umzusteigen, sollte besser bei HTML bleiben und das natürlich fehlerfrei schreiben.

      Mathias

      1. Hi,

        »» Nebenbei bemerkt solltest Du unbedingt bei Deinem HTML-Code auf XHTML-Kompatibilität achten, wo immer es möglich ist
        Warum, wenn ich HTML schreibe, schreibe ich HTML. Die Aussicht, es irgendwann nach XHTML umwandeln zu wollen, ist dann doch zu fern, um mir XHTML-kompatible Syntax in HTML 4 anzugewöhnen.

        soweit möglich XHTML zu schreiben vermeidet eine Vielzahl von Fehlern, weil man sich mit einem sehr viel weniger umfangreichen und klareren Regelwerk herumschlagen muss.

        »» oder gleich auf XHTML umsteigen.
        Warum?

        Weil das weitere Fehlerquellen ausschließt.

        Wer mit HTML gut fährt und bisher keine Vorteile darin sieht, auf XHTML umzusteigen, sollte besser bei HTML bleiben und das natürlich fehlerfrei schreiben.

        Ich habe nichts Gegenteiliges behauptet.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. soweit möglich XHTML zu schreiben vermeidet eine Vielzahl von Fehlern, weil man sich mit einem sehr viel weniger umfangreichen und klareren Regelwerk herumschlagen muss.

          Herumschlagen muss man sich nun nicht. HTML kann man von Anfang an genauso simpel, klar und einfach schreiben wie XHTML. Lediglich kann man einige Regeln nicht so ohne weiteres mit verbreiteten Tools maschinell überprüfen. Sehr schade, dass HTML-Validatoren verbreitet sind, HTML-Lints mit korrigierten SGML-Deklarationen und sinnvollen DTDs nicht.

          oder gleich auf XHTML umsteigen.
          Warum?

          Weil das weitere Fehlerquellen ausschließt.

          Ja. Und viele weitere, schwerwiegendere hinzuholt. Bisher bin ich auf wenig XHTML-Anwender gestoßen, die XHTML mit all seinen Eigenheiten wirklich verstanden haben. Da dominieren eher Halbwissen und Missverständnisse. Man nutzt halt XHTML, aber man weiß nicht wirklich, was man da tut. Gut, HTML 4 hat auch so seine Fallstricke, es ist aber schwieriger, dort etwas falsch zu machen. Im Allgemeinen bin ich zu der Überzeugung gelangt, dass der Umstieg auf XHTML vor allem der Schritt von einem Fettnäpfen ins Nächste ist. (Was nicht heißt, dass ich keine »aufgeklärte« Nutzung von XHTML empfehle.)

          Mathias

  2. Hallo,

    <a href=# onClick="self.parent.tb_remove();window.setTimeout("thickbox('/routenplaner.php',340,299,'iframe','false')", 2000);">Routenplaner</a>

      
    Da stimmt etwas mit den Anführungszeichen nicht.  
    Aus HTML-Sicht geht das onClick-Attribut nur bis hier:  
      
    `<a href=# onClick="self.parent.tb_remove();window.setTimeout("`{:.language-html}  
      
    Probier mal, die inneren doppelten Anführungszeichen durch  
    einfache zu ersetzen und die darin enthaltenen einfachen  
    Anführungszeichen mit einem Backslash zu entschärfen:  
      
    `<a href="#" onClick="self.parent.tb_remove();window.setTimeout('thickbox(\'/routenplaner.php\',340,299,\'iframe\',\'false\')', 2000);">Routenplaner</a>`{:.language-html}  
      
    HTH, mfg  
    Thomas
    
    1. P.S.

      Ich sehe eigentlich nicht ein, warum die innere Funktion
      überhaupt in Anführungszeichen gepackt ist:

      <a href="#" onClick="self.parent.tb_remove();window.setTimeout('thickbox(\'/routenplaner.php\',340,299,\'iframe\',\'false\')', 2000);">Routenplaner</a>

      Stattdessen könnte man doch vermutlich einfach schreiben:

      <a href="#" onClick="self.parent.tb_remove();window.setTimeout(thickbox('/routenplaner.php',340,299,'iframe','false'), 2000);">Routenplaner</a>

      mfg Thomas

      1. Hi,

        Stattdessen könnte man doch vermutlich einfach schreiben:

        <a href="#" onClick="self.parent.tb_remove();window.setTimeout(thickbox('/routenplaner.php',340,299,'iframe','false'), 2000);">Routenplaner</a>

        nur wenn die Funktion thickbox(), die im Moment des Klicks ausgeführt wird, den fehlenden Timeout in irgendeiner Form kompensiert.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
    2. Hi,

      Probier mal, die inneren doppelten Anführungszeichen durch
      einfache zu ersetzen

      warum dieser Umstand? Eine einfache HTML-Kodierung reicht.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
    3. <a href="#" onClick="self.parent.tb_remove();window.setTimeout('thickbox(\'/routenplaner.php\',340,299,\'iframe\',\'false\')', 2000);">Routenplaner</a>

      Warum so aufwändig, setTimeout kann man auch ein Funktionsobjekt übergeben:

      onclick="window.setTimeout(function () { thickbox('/routenplaner.php', 340, 299, 'iframe', 'false'); }, 2000);"

      Hier ist keine Maskierung notwendig. Sinnvoller wäre es, den JS-Code aus dem HTML auszulagern:

      jQuery(document).ready(function () {
         jQuery("#IDdesLinks").click(function () {
            thickbox( usw. );
         });
      });

      Mathias

      1. Hier ist keine Maskierung notwendig. Sinnvoller wäre es, den JS-Code aus dem HTML auszulagern:

        jQuery(document).ready(function () {
        jQuery("#IDdesLinks").click(function () {
        thickbox( usw. );
        });
        });

        Wie muss die Funktion jQuery definiert sein, damit das funktioniert?

        --
        Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
        Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|
        1. Wie muss die Funktion jQuery definiert sein, damit das funktioniert?

          Worauf willst du hinaus?
          Die JavaScript-Bibliothek kennst du schon?
          Thickbox basiert auf jQuery.

          Mathias