window.setTimeout - Funktion in Funktion aufrufen
Markus Beierlein
- javascript
3 Cheatah0 Thomas Luethi- html
0 Thomas Luethi0 Cheatah
0 Cheatah0 molily
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
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
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
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
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
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
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
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
Hi,
Probier mal, die inneren doppelten Anführungszeichen durch
einfache zu ersetzen
warum dieser Umstand? Eine einfache HTML-Kodierung reicht.
Cheatah
<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
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?
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