Mein Aufruf an die externe Lib arbeitet nicht
Reiner Wirth
- javascript
0 Struppi0 wahsaga0 Reiner Wirth0 Reiner Wirth0 Struppi
0 Reiner Wirth
Hallo,
ich benutze eine externe javascript-Library für drag & drop-Aktionen
mit:<script type="text/javascript" src="wz_dragdrop.js"></script>
wenn ich mit:
<area title="Klick: abspielen | Doppelklick: anzeigen" onclick="clickTimer('dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()', '../Sound1/04Golo.html')" shape="rect" coords="664,300,738,332">
Paameter idEbne und idSound an meine javascript Funktion
function clickTimer(idEbene, idSound)
{
Ebene=idEbene; // hier weiß ich nicht, warum ich das brauche
Sound=idSound; // zum Glück gehts trotzdem
klicks++;
tout = setTimeout('clickTest()',500);
}
klicks = 0, tout=null;
function clickTest()
{
clearTimeout(tout);
if(klicks==1) {
alert(Sound);
parent.soundfrm.location.href = Sound; //-> Sound abgespielen
} else {
alert(Ebene);
parent.inhalt.location.href = Ebene; //-> Ebenen-Fenster öffnen hier gehts nicht weiter
}
klicks = 0;
}
übergebe, so werden sie zwar übernommen, das zeigen alert(Ebene); und alert(Sound); , aber der Aufruf bewirkt in dem Frame "inhalt" nichts. Stört euch bitte zunächst nicht an meiner etwas obskuren Testmethode, um Einfach- und Doppelklick zu unterscheiden. Sie funktioniert in Firefox, Opera und Safari. Vielleicht durchschaut jemand, warum dieses "Gemurkse" überhaupt funktioniert. Es geht sicher eleganter.
Meine eigentliche Frage ist aber eine ndere.
Wenn ich direkt im Frame "inhalt"
<area title="anzeigen" onclick="dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()" shape="rect" coords="328,44,382,73"> schreibe
dann funktioniert der Aufruf.
Kann mir jemand weiterhelfen, den übergebenen und gelesenen Parameter Ebene in clickTest() ordentlich zu formulieren?
Reiner
übergebe, so werden sie zwar übernommen, das zeigen alert(Ebene); und alert(Sound); ,
Also wenn ich das richit sehe, sind deine Werte Zahlen oder?
Was soll deiner Meinung dann bei der Zuweisung als URL passieren?
Kann mir jemand weiterhelfen, den übergebenen und gelesenen Parameter Ebene in clickTest() ordentlich zu formulieren?
Kommt darauf an was diese machen sollen.
Struppi.
hi,
übergebe, so werden sie zwar übernommen, das zeigen alert(Ebene); und alert(Sound); ,
Also wenn ich das richit sehe, sind deine Werte Zahlen oder?
Eher Strings, möchte ich meinen:
onclick="clickTimer('dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()', '../Sound1/04Golo.html')"
Die beiden Parameter, die als idEbene und idSound an die Funktion übergeben werden, sind also Strings.
Was soll deiner Meinung dann bei der Zuweisung als URL passieren?
Dass der in diesen Strings enthaltene Javascript-Code ausgeführt wird, könnte _evtl._ bei Zuweisung an location.href noch erreicht werden, wenn man das Pseudoprotokoll "javascript:" davorhängt.
Dass es im anderen Fall "funktioniert", ist klar:
onclick="dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()"
Hier werden ja keine Strings an irgendeine Funktion übergeben, sondern hier wird Javascript-Code als Inhalt eines Eventhandler-Attributes notiert.
gruß,
wahsaga
Dass der in diesen Strings enthaltene Javascript-Code ausgeführt wird, könnte _evtl._ bei Zuweisung an location.href noch erreicht werden, wenn man das Pseudoprotokoll "javascript:" davorhängt.
gruß,
wahsaga
genau so ist es, es ist javascript-Code, um die Ebene zu positionieren und zu zeigen, nur bin ich zu blöd, das auszudrücken in meiner
function clickTest()
{
clearTimeout(tout);
if(klicks==1) {
alert(Sound);
parent.soundfrm.location.href = Sound; //-> Sound abgespielen aus URL
} else {
alert(Ebene); //bis hierhin habe ich meinen javascript-Code übergeben
… //hier soll jetzt dieser javascript-Code ausgeführt werden, der in Ebene als String übergeben wurde.
}
klicks = 0;
}
Sorry, aber ich stehe auf dem Schlauch…
Reiner
Dass der in diesen Strings enthaltene Javascript-Code ausgeführt wird, könnte _evtl._ bei Zuweisung an location.href noch erreicht werden, wenn man das Pseudoprotokoll "javascript:" davorhängt.
gruß,
wahsaga
Hallo, vielleicht ist jemand noch da, der mir sagen kann, wie wahsaga das gemeint hat?
meinen in Ebene übernommenen javascript-Code mit:
1. Versuch:
parent.inhalt.location.href = javascript:Ebene;
auf den Frame inhalt anwenden?
Fehlermeldung in Firefox
2. Versuch:
parent.inhalt.location.href = "javascript:Ebene";
jetzt schreibt Fiefox den Code als String in den Frame. Keine Ausführung desselben.
Gibt es noch mehr Möglichkeiten?
Ihr würdet mir sehr helfen, wenn ihr nochmal vorbeischauen und kurz nach oben blättern würdet.
Gruß Reiner
meinen in Ebene übernommenen javascript-Code mit:
Tut mir leid, aber da steckt zuviel Unkenntniss drin, um das mal eben hier zu beheben. Du musst noch einiges lesen.
Ich vermute du willst Frame übergreifend JS Funktion aufrufen, dazu benötigst du kein location.href damit rufst du lefdiglich eine neue Seite auf.
Gibt es noch mehr Möglichkeiten?
Ja, du kannst direkt auf die Funktion über die Fensterreferenzen zugreifen.
http://de.selfhtml.org/javascript/objekte/frames.htm und http://aktuell.de.selfhtml.org/artikel/javascript/fensterzugriff/
Struppi.
Ich vermute du willst Frame übergreifend JS Funktion aufrufen, dazu benötigst du kein location.href damit rufst du lefdiglich eine neue Seite auf.
Gibt es noch mehr Möglichkeiten?
Ja, du kannst direkt auf die Funktion über die Fensterreferenzen zugreifen.
http://de.selfhtml.org/javascript/objekte/frames.htm und http://aktuell.de.selfhtml.org/artikel/javascript/fensterzugriff/Struppi.
Geht es so, wie im Beispiel aus der Objektreferenz
parent.NameDesFrames.Eigenschaft/Methode();
parent.RechtesFenster.close();
wäre bei mir:
function clickTest()
{
clearTimeout(tout);
if(klicks==1) {
alert(Sound);
parent.soundfrm.location.href = Sound; //-> Sound abgespielen (das funktioniert bereits)!
} else {
alert(Ebene); // bis hier komm ich auch noch und kann mir den Inhalt von Ebene zeigen lassen, aber jetzt!
parent.inhalt.jsCall(); // Javascript aufrufen in frame inhalt
}
klicks = 0;
}
function jsCall()
{
…… //was hier rein muß, der Ausdruck von Ebene genau den kann ich nicht formulieren
}
z.B ergibt sich als Befehl, der schon in Ebene übergeben wurde:
dd.elements.Bsp7Eheband.moveTo(dd.getScrollX()+700, dd.getScrollY()+150), dd.elements.Bsp7Eheband.show()
hiermit wird eine div-Ebene positioniert und gezeigt
so ein Befehl soll im frame Inhalt ausgeführt werden
Denke ich in die richtige Richtung?
Schönen Gruß
Reiner
Geht es so, wie im Beispiel aus der Objektreferenz
parent.NameDesFrames.Eigenschaft/Methode();parent.RechtesFenster.close();
ja.
wäre bei mir:
function clickTest()
{
clearTimeout(tout);
if(klicks==1) {
alert(Sound);
parent.soundfrm.location.href = Sound; //-> Sound abgespielen (das funktioniert bereits)!
} else {
alert(Ebene); // bis hier komm ich auch noch und kann mir den Inhalt von Ebene zeigen lassen, aber jetzt!
parent.inhalt.jsCall(); // Javascript aufrufen in frame inhalt
irgendwie hab ich das Gefühl, du denkst über zuviele Ecken. Aber ich kann nicht nicht mehr alles genau nachvollziehen (ich bin momentan sehr sehr unkonzentriert, 2. Tag ohne Rauch :-( )
z.B ergibt sich als Befehl, der schon in Ebene übergeben wurde:
dd.elements.Bsp7Eheband.moveTo(dd.getScrollX()+700, dd.getScrollY()+150), dd.elements.Bsp7Eheband.show()
die Frage ist, in welchem window ist dd?
Struppi.
z.B ergibt sich als Befehl, der schon in Ebene übergeben wurde:
dd.elements.Bsp7Eheband.moveTo(dd.getScrollX()+700, dd.getScrollY()+150), dd.elements.Bsp7Eheband.show()
die Frage ist, in welchem window ist dd?
Struppi.
dd.elements.Bsp7…, …,… sind Funktions-Aufrufe an eine externe js-Library, eigentlcih müßte der String so wie er ist im Frame inhalt »abgefeuert« werden und anschließend erscheint dann eine Ebene im Frame.
Ich benutze eine Library drag amd drop aus der Site http://www.walterzorn.de/dragdrop/dragdrop.htm
Verstehst Du jetzt?
Gruß Reiner
dd.elements.Bsp7…, …,… sind Funktions-Aufrufe an eine externe js-Library, eigentlcih müßte der String so wie er ist im Frame inhalt »abgefeuert« werden und anschließend erscheint dann eine Ebene im Frame.
Tja, jetzt sind wir bei einem weiterem Verständnisproblem, nein es sind Funktionsaufrufe im aktuellen window, wie gesagt ich durchschau momentan deine Frmaesstruktur nicht, daher weiß ich nicht genau, was du wo ansprechen willst. Also ob dein Problem der Aufruf der Funktion oder die Referenzierung des Elementes ist. Aber eins weiß ich, du musst keinen "String feuern", sondern einfach eine Funktion aufrufen.
Ich benutze eine Library drag amd drop aus der Site http://www.walterzorn.de/dragdrop/dragdrop.htm
Verstehst Du jetzt?
Ja, das war mir klar, die Bibliothek ist mir bekannt.
Struppi.
Tja, jetzt sind wir bei einem weiterem Verständnisproblem, nein es sind Funktionsaufrufe im aktuellen window, wie gesagt ich durchschau momentan deine Frmaesstruktur nicht, daher weiß ich nicht genau, was du wo ansprechen willst. Also ob dein Problem der Aufruf der Funktion oder die Referenzierung des Elementes ist. Aber eins weiß ich, du musst keinen "String feuern", sondern einfach eine Funktion aufrufen.
Struppi.
Ja klar, es sind Aufrufe der Funktion im aktuellen window
z.B.
dd.elements.Bsp10.show() //zeigt die Ebene mit der id Bsp10
dd.getScrollY() //ermittelt die Scrollposition
oder auch
dd.elements.Bsp43.moveTo(dd.getScrollX()+690, dd.getScrollY()+270)
als verschachtelte Funktion
probiert hab ich:
parent.inhalt.(dd.elements.Bsp10.show()); das geht halt nicht so einfach.
Hilf mir bitte noch ein wenig, morgen, wenn wir ausgeschlafen sind.
Gruß Reiner
Ja klar, es sind Aufrufe der Funktion im aktuellen window
z.B.
dd.elements.Bsp10.show() //zeigt die Ebene mit der id Bsp10
dd.getScrollY() //ermittelt die Scrollposition
oder auchdd.elements.Bsp43.moveTo(dd.getScrollX()+690, dd.getScrollY()+270)
Ja, du musst einfach nur dir noch ein window. vornedran denken, das macht JS da von allein dran.
Also
window.dd.elements.Bsp43.moveTo(window.dd.getScrollX()+690, window.dd.getScrollY()+270)
parent.inhalt.(dd.elements.Bsp10.show()); das geht halt nicht so einfach.
Das ist halt die Frage, gibt es ein Objekt dd in dem Fenster parent.inhalt?
Wenn ja dann müßte es gehen, bzw. was heißt eigentlich nicht gehen, wie lautet genaue Fehlermeldung?
Könntest du nicht mal ein Beispiel online stellen?
Struppi.
Tja, jetzt sind wir bei einem weiterem Verständnisproblem, nein es sind Funktionsaufrufe im aktuellen window, wie gesagt ich durchschau momentan deine Frmaesstruktur nicht, daher weiß ich nicht genau, was du wo ansprechen willst. Also ob dein Problem der Aufruf der Funktion oder die Referenzierung des Elementes ist. Aber eins weiß ich, du musst keinen "String feuern", sondern einfach eine Funktion aufrufen.
Struppi.
Hallo Struppi,
ich geh noch mal auf Deiner vorvorige Überlegung zurück und versuche, klarer
auszudrücken, was ich eigentlich will.
Mein Frameset
******************************************************************************
* frame navi * frame auswahl * frame soundfrm *
*******************************************************************************
* frame inhalt *
*
* hier ist z.B. meine aktuelle Teil1.html geladen sehr lang über (6000px) *
* mit vielen Bildern, Klickpunkten *
* *
* //hier bin in ich und hier soll sich alles abspielen: *
* *
* *
* <script type="text/javascript" src="wz_dragdrop.js"></script> *
* <script type="text/javascript"><!-- // meine js-Funktionen * * *
* function stopSound(){ //-> um laufenden Sound zu stoppen, "Stille" laden * parent.soundfrm.location.href = "../Sound1/stille.html"; //frameübergreifend *
* } *
* document.ondblclick = stopSound; *
* *
* function clickTimer(idEbene, idSound) *
* { *
* Ebene=idEbene; *
* Sound=idSound; *
* klicks++; *
* tout = setTimeout('clickTest()',500); *
* } *
* klicks = 0, tout=null; * *
* function clickTest() *
* { *
* clearTimeout(tout); *
* if(klicks==1) { *
* // alert(Sound); *
* parent.soundfrm.location.href = Sound; //-> Sound frameübergreifend *
* } else { *
* // alert(Ebene); //in Ebene steht die DHTML Aufruf-Funktion zur Verfügung *
* callDHTMLFunktion(Ebene) //vielleicht so ? *
* } *
* klicks = 0; *
* } *
* *
* function callDHTMLFunktion() *
* { *
* // tja Struppi, hier muss halt jetzt was rein, jetzt du!!! *
* } *
* *
* das wärs eigentlich, warum kann ich das nicht alleine? *
* *
* Danke für Deine Hilfe! *
* Gruß Reiner *
* *
* *
*************************************************************************************
ich geh noch mal auf Deiner vorvorige Überlegung zurück und versuche, klarer
auszudrücken, was ich eigentlich will.
Das ist immer noch nicht klar, soweit ich das verstehe willst du:
dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show() Zeitverzögert aufrufen und zwar im gleichen Frame.
und dir geht es um den String 'Bsp4Golo' d.h. die Ebene heißt (soweit ich das versteh) so. Also muss der aufruf so erfolgen:
clickTimer( 'Bsp4Golo' ..... );
und dann, wenn du wirklich über soviele Funktionen springen willst, in etwa so:
function callDHTMLFunktion(id)
{
dd.elements[id].moveTo( dd.getScrollX() + 50, dd.getScrollY() + 450);
dd.elements[id].show()
}
wobei das nur ein Ansatz sein kann, die nicht klar ist was du wirklich vorhast. z.b. bietet die Bibliothek auch eine Reihe Callbackfunktionen für verschiedenste Aktionen.
Struppi.
ich geh noch mal auf Deiner vorvorige Überlegung zurück und versuche, klarer
auszudrücken, was ich eigentlich will.Das ist immer noch nicht klar, soweit ich das verstehe willst du:
dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show() Zeitverzögert aufrufen und zwar im gleichen Frame.
so ist es, es sind ja hier drei Aufrufe hintereinander, es reicht mir aber erst mal ein Funktionsaufruf z.B. dd.elements.Bsp4Golo.show(), – oder ist das kein Funktionsaufruf sondern etwas viel komplizierteres? Offenbar wird ja alles wieder auseinander genommen im call
Bsp4Golo ist mein aktueller Wert für den Layer-Namen, mit dem gearbeitet wird.
und dir geht es um den String 'Bsp4Golo' d.h. die Ebene heißt (soweit ich das versteh) so. Also muss der aufruf so erfolgen:
clickTimer( 'Bsp4Golo' ..... );
Nein! Im clickTimer wird jetzt 'dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()' übergeben, der ganze Salat zum zeigen, positionieren und zum zeigen. Die Sache mit dem clickTimer funktioniert ja, die Variable idEbene enthält bereits den ganzen string, die Funktionen für DHTML,
ich denke doch, dass das gehen sollte
Ich war davon ausgegangen, dass, wenn es gelänge dasselbe, was ja auch sukzessiv abgearbeitet wird, wenn ich ganz normal im body mit
<area title="Ebene zeigen" onclick="dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()" shape="rect" coords="328,44,382,73">
event gesteuert arbeite auch als callDHTMLFunktion(id) formuliert werden kann.
Bin ich da zu tollkühn?
und dann, wenn du wirklich über soviele Funktionen springen willst, in etwa so:
function callDHTMLFunktion(id)
{
dd.elements[id].moveTo( dd.getScrollX() + 50, dd.getScrollY() + 450);
dd.elements[id].show()
}
>
das bedeutet, daß ich alle Details wie +50 (mein gewünschter xOffset für einen bestimmten Aufruf) und +450 (yOffset) auch getrennt übergeben muß, aber wenn Du meinst, es geht nicht anders, muss ichs halt machen, dann sind es 3 Varablen Ebenen-Name, xOffset und yOffset, alles andere ist ja festgelegte Syntax.
> wobei das nur ein Ansatz sein kann, die nicht klar ist was du wirklich vorhast. z.b. bietet die Bibliothek auch eine Reihe Callbackfunktionen für verschiedenste Aktionen.
wenn ich nur wüßte, was Callbackfunktionen sind, gibts da was in SELFHTML zu lesen?
>
> Struppi.
Vielen Dank für die Wegbeschreibung und sorry über das zerhackte Layout, plötzlich war allles schon weg, bevor ich zu Ende war mit meinem Edieren
Gruß Reiner
und dann, wenn du wirklich über soviele Funktionen springen willst, in etwa so:
function callDHTMLFunktion(id)
{
dd.elements[id].moveTo( dd.getScrollX() + 50, dd.getScrollY() + 450);
dd.elements[id].show()
}
>
> wobei das nur ein Ansatz sein kann, die nicht klar ist was du wirklich vorhast. z.b. bietet die Bibliothek auch eine Reihe Callbackfunktionen für verschiedenste Aktionen.
>
> Struppi.
Gratuliere! Struppi, du bist ein wunderbarer Lehrer, vielen Dank.
Ich bin immer an meiner "Hauruck-Methode" gescheitert. Jetzt mit 3 Variablen klappt alles super
Einen kleinen Schönheitsfehler bei der Übergabe der Variablen gibts noch bei meiner Funktions-Springerei
~~~javascript
function clickTimer(idEbene, xOff, yOff, idSound)
{
Ebene=idEbene; // unschön! weil doppelt gemoppelt
Sound=idSound; // unschön! weil doppelt gemoppelt
xO=xOff; // unschön! weil doppelt gemoppelt
yO=yOff; // unschön! weil doppelt gemoppelt
klicks++;
tout = setTimeout('clickTest()',500);
}
klicks = 0, tout=null;
function clickTest()
{
clearTimeout(tout);
if(klicks==1) {
parent.soundfrm.location.href = Sound; //-> Sound abgespielen
} else {
callDHTML(Ebene, xO, yO);
}
klicks = 0;
}
function callDHTML(id, xO, yO)
{
dd.elements[id].moveTo(dd.getScrollX() + xO, dd.getScrollY() + yO);
dd.elements[id].show()
}
ich habs markiert, dort übergebe ich nochmal
idEbene an Ebene
idSound an Sound
xOff an xO und
yOff an yO
offenbar sind in clickTest die Variablen undefiniert, wenn ich aber diesen zugegebenermaßen blöden Trick mit der Gleichsetzung anwende tut alles.
Ich könnte mir aber denken, dass nicht alle Browser da mitmachen, deshalb frag ich lieber noch mal, Du merkst ja ohnehin, dass ich ein Anfänger bin.
Vielleicht noch ein kleiner Tipp über die Verwendung von Variablen?
Gruß und Dank
Reiner
Gratuliere! Struppi, du bist ein wunderbarer Lehrer, vielen Dank.
Ich bin immer an meiner "Hauruck-Methode" gescheitert. Jetzt mit 3 Variablen klappt alles super
Ich hatte schon Angst es klappt nicht mehr ;-)
Einen kleinen Schönheitsfehler bei der Übergabe der Variablen gibts noch bei meiner Funktions-Springerei
Vor allem wegen dem Timeout.
Da Parameter nur in der Funktion lokal sichtbar sind, bleibt dir erstmal anderer Weg. Wobei aber globale Variabeln vermieden werden sollten und daher solch ein Ansatz gut wäre:
function clickTimer(idEbene, xOff, yOff, idSound)
{
klicks++;
setTimeout( function()
{
var Ebene=idEbene;
var Sound=idSound;
var xO=xOff;
var yO=yOff;
if(klicks==1) {
parent.soundfrm.location.href = Sound; //-> Sound abgespielen
} else {
callDHTML(Ebene, xO, yO);
}
klicks = 0;
} ,500);
}
var klicks = 0, tout=null;
(wobei ich nicht sicher bin mit dem klicks++ und klicks = 0, ich hab den Eindruck so passiert nur das mit dem sound)
Zum Verständniss, dass ist eine anonyme Funktion, die aufgerufen wird, wenn der Timeout abläuft.
Ich könnte mir aber denken, dass nicht alle Browser da mitmachen, deshalb frag ich lieber noch mal,
doch, das war schon richtig.
Struppi.
Da Parameter nur in der Funktion lokal sichtbar sind, bleibt dir erstmal anderer Weg. Wobei aber globale Variabeln vermieden werden sollten und daher solch ein Ansatz gut wäre:
function clickTimer(idEbene, xOff, yOff, idSound)
{
klicks++;
setTimeout( function()
{
var Ebene=idEbene;
var Sound=idSound;
var xO=xOff;
var yO=yOff;if(klicks==1) {
parent.soundfrm.location.href = Sound; //-> Sound abgespielen
} else {
callDHTML(Ebene, xO, yO);
}
klicks = 0;
} ,500);
}
var klicks = 0, tout=null;
> (wobei ich nicht sicher bin mit dem klicks++ und klicks = 0, ich hab den Eindruck so passiert nur das mit dem sound)
>
> Zum Verständniss, dass ist eine anonyme Funktion, die aufgerufen wird, wenn der Timeout abläuft.
> Struppi.
Hallo Struppi, kannst Du bitte da nochmal drauf gucken, ob das alles so richtig war, was Du geschrieben hast oder ist das ein paar Nummern zu hoch für mich.
z.B die Zeile
setTimeout( function()
bleibt da dann stehen?
tout = setTimeout( ,500); //da ja jetzt clickTest wegfallen kann?
denn tout kommt dann nur noch einmal bei
var klicks = 0, tout=null;
} ,500); ist da etwas verloren gegangen? oder kann ,500 hier weg?
Gruß Reiner
Hallo Struppi, kannst Du bitte da nochmal drauf gucken, ob das alles so richtig war, was Du geschrieben hast oder ist das ein paar Nummern zu hoch für mich.
z.B die Zeile
setTimeout( function()
bleibt da dann stehen?
tout = setTimeout( ,500); //da ja jetzt clickTest wegfallen kann?
ja.
denn tout kommt dann nur noch einmal bei
tout ist unwichtig.
var klicks = 0, tout=null;
Das sollte ganz ausserhalb stehen, da es globale Variabeln sind aber tout wird nicht mehr gebraucht.
} ,500); ist da etwas verloren gegangen? oder kann ,500 hier weg?
nein.
Der Punkt ist, statt clickTest() wird eine anonyme Funktion verwendet, vom Prinzip sieht das so aus:
window.setTimeout(
// hier beginnt die anon. Funkt.
function() {
// Funktionkörper,
// also das was in clickTest steht
//plus den Variabeln die du verdoppeln musst
...
}, 500 // ms wann der aufruf der Funktion statt findet
); // Ende timeout
Struppi.
Sorry Struppi,
bitte nochmal gucken und helfen, ich möchte doch so gerne Deine schicke anonyme
timeout-Funktion verstehen und mein dummes clickTest beerdigen.
Meine Firefox Fehlerkonsole meldet einen Syntax-Fehler bei der fehlenden Klammer
} ,500);
Bitte schau mal
und 2.
setTimeout(function(), 500);
stimmt das? Ich weiß, ich habs schon mal gefragt
function clickTimer(idEbene, xOff, yOff, idSound)
{
klicks++;
setTimeout( function()
{
var Ebene=idEbene;
var Sound=idSound;
var xO=xOff;
var yO=yOff;if(klicks==1) {
parent.soundfrm.location.href = Sound; //-> Sound abgespielen
} else {
callDHTML(Ebene, xO, yO);
}
klicks = 0;
} ,500); //hier sieht Firefox Syntax-Probleme
}
var klicks = 0, tout=null;
>
> Struppi.
So jetzt noch was, was mich fast irrsinnig werden ließ.
in dem Funktionsaufruf
dd.elements[id].moveTo(dd.getScrollX() + xO, dd.getScrollY() + yO);
werden die Zahlen als Strings interpretiert, also aus
500+250 wird 500250, man kann sich denken wohin der Browser dann scrollt
Ich hab einfach probiert und es geht wirklich:
dd.elements[id].moveTo( dd.getScrollX()\*1 + xO\*1, dd.getScrollY()\*1 + yO\*1);
ist es richtig, dass ich mit der Multiplikation erzwingen kann, dass mit Zahlen gerechnet wird? Ich fass es kaum.
Nochmals Dank und bitte schau nochmal auf den clickTimer!
Gruß Reiner
und 2.
setTimeout(function(), 500);stimmt das? Ich weiß, ich habs schon mal gefragt
nö.
so: setTimeout(function() {....}, 500);
[code lang=javascript]function clickTimer(idEbene, xOff, yOff, idSound)
{
klicks++;
setTimeout( function()
{
var Ebene=idEbene;
var Sound=idSound;
var xO=xOff;
var yO=yOff;if(klicks==1) {
parent.soundfrm.location.href = Sound; //-> Sound abgespielen
} else {
callDHTML(Ebene, xO, yO);
}
klicks = 0;
} ,500); //hier sieht Firefox Syntax-Probleme
}
Also ich seh sie nicht.
ist es richtig, dass ich mit der Multiplikation erzwingen kann, dass mit Zahlen gerechnet wird? Ich fass es kaum.
Ja. Es gibt aber auch noch parseInt() parseFloat() oder eine subtraktion mit 0
Struppi.
so: setTimeout(function() {....}, 500);
»»
Struppi.
Hallo Struppi, wäre nur noch die spannende Frage, was {....} bedeutet, ich kann damit nichts anfangen, sorry. Was soll da rein?
Gruß Reiner
so: setTimeout(function() {....}, 500);
»»
Struppi.Hallo Struppi, wäre nur noch die spannende Frage, was {....} bedeutet, ich kann damit nichts anfangen, sorry. Was soll da rein?
Ei, das was passieren soll. Also die deklaration der Variabeln und der aufrud der Funktion, also vermutlich das:
Ebene=idEbene;
Sound=idSound;
xO=xOff;
yO=yOff;
klicks++;
clearTimeout(tout);
if(klicks==1) parent.soundfrm.location.href = Sound;
else callDHTML(Ebene, xO, yO);
klicks = 0;
Struppi.
Hallo Struppi, wäre nur noch die spannende Frage, was {....} bedeutet, ich kann damit nichts anfangen, sorry. Was soll da rein?
Ei, das was passieren soll. Also die deklaration der Variabeln und der aufrud der Funktion, also vermutlich das:
Ebene=idEbene;
Sound=idSound;
xO=xOff;
yO=yOff;
klicks++;
clearTimeout(tout);
if(klicks==1) parent.soundfrm.location.href = Sound;
else callDHTML(Ebene, xO, yO);
klicks = 0;
>
> Struppi.
bitte nochmal langsam für mich Dummy zum kapieren:
Jetzt haben wir eine
function clickTimer(idEbene, xOff, yOff, idSound)
{
klicks++;
setTimeout(function() , 500);
{
var Ebene=idEbene;
var Sound=idSound;
var xO=xOff;
var yO=yOff;
if(klicks==1) {
parent.soundfrm.location.href = Sound;
} else {
callDHTML(Ebene, xO, yO);
}
klicks = 0;
} ,500);
}
var klicks = 0
und in das setTimeout kommt alles nochmal oder was?
Ich kann nicht folgen, tut mir leid.
Grup Reiner
bitte nochmal langsam für mich Dummy zum kapieren:
Jetzt haben wir eine
nein falsch.
setTimeout(function() { HIER KOMMT DER GANZE KRAM REIN }, 500);
du schreibst es hierhin, da bringt es nichts.
Dem function() folgt immer ein Block zwischen geschweiften Klammern.
Struppi.
Was soll deiner Meinung dann bei der Zuweisung als URL passieren?
Kann mir jemand weiterhelfen, den übergebenen und gelesenen Parameter Ebene in clickTest() ordentlich zu formulieren?
Kommt darauf an was diese machen sollen.
Struppi.
sorry, jetzt fällt mir auf, was für einen Quatsch ih geschrieben habe:
mit
parent.inhalt.location.href wird ja eine URL zugewiesen,
was aber passieren soll ist:
die Ebene "Bsp4Golo" soll positioniert und gezeigt werden über den Befehl
dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()
Dieser Befehl soll raus aus meiner
function clickTest()
{
clearTimeout(tout);
if(klicks==1) {
alert(Sound+" ScrollY = "+dd.getScrollY());
parent.soundfrm.location.href = Sound; //-> Sound abgespielen (URL)
} else {
alert(Ebene);
//hier solls passieren und ich weiß nicht wie !!! -> Ebenen-Fenster öffnen
}
klicks = 0;
}
Reiner