kleines Problem beim onMouseOver
Drathy
- javascript
0 Cheatah0 Drathy0 Gunnar Bittersmann
0 Drathy
0 Sven Rautenberg
Hallo schon wieder!
Diesmal ein kleines Problem mit Javascript, was zwar nicht besonders schwerwiegend, aber doch irgendwie unschön ist.
Und zwar habe ich eine Liste von Links über die ich einen onMouseOver-Effekt gelegt habe, mittels dem im rechten Bereich meiner Seite eine kleiner Vorschau zum Link angezeigt wird. Das klappt soweit auch gut, womit ich aber nicht ganz zufrieden bin:
Wenn ich mit der Maus über den Link fahre, wird das Bild geladen. Ist das Bild fertig geladen und ich bewege die Maus wieder ein kleines Stück auf dem Link, dann wird das Bild erneut geladen. So ist es im Firefox und im Opera.
Im IE hingegen ist das eigentliche Problem: Dort wird das Bild immer wieder neu geladen, so lange die Maus über dem Link ist.
Meine Frage nun: Ist das normal bei onMouseOver? Mir ist schon irgendwie klar, dass dieser eventHandler nicht unbedingt dafür geeignet ist, um Links aufzurufen, aber ich habe keine Alternative gesehen... Besteht evtl. die Möglichkeit, dass man dem eventHandler sagt, dass er die Aktion nur einmal ausführen soll?
Hat jemand ne Idee?
So wird der Link übrigens (aus PHP raus) erzeugt:
echo ('<td><a href="'.$_SERVER['PHP_SELF'].'?id=3&action=download&datei='.$dateiid.'" onmouseover=document.location.href="index.php?id=3&action=vorschau&bildid='.$dateiid.'">'.$dateiname.'</a></td>');
Gruß,
Drathy
Hi,
Meine Frage nun: Ist das normal bei onMouseOver?
nein. Es ist normal beim IE. Zu dessen irrigen Caching-Verhalten siehe Archiv.
Mir ist schon irgendwie klar, dass dieser eventHandler nicht unbedingt dafür geeignet ist, um Links aufzurufen, aber ich habe keine Alternative gesehen...
Bezüglich welchen Problems eigentlich?
So wird der Link übrigens (aus PHP raus) erzeugt:
1.) Bei clientseitigen Problemen ist serverseitiger Code niemals nützlich, oft genug aber hinderlich. Poste *NIE* serverseitigen Code bei clientseitigen Problemen.
echo ('<td>
2.) Bist Du sicher, tabellarische Daten vorliegen zu haben?
<a href="'.$_SERVER['PHP_SELF'].'?id=3&action=download&datei='.$dateiid.'"
3.) Erzeuge gültigen HTML-Code.
onmouseover=document.location.href=
4.) Erzeuge gültigen HTML-Code.
5.) Das location-Objekt war noch nie im document-Objekt angesiedelt.
"index.php?id=3&action=vorschau&bildid='.$dateiid.'">'.$dateiname.'</a></td>');
6.) Erzeuge gültigen HTML-Code.
Cheatah
Bezüglich welchen Problems eigentlich?
Bezüglich des "Problems" ein Vorschaubild auf der Seite anzeigen zu lassen, wenn der Link überfahren wird...
1.) Bei clientseitigen Problemen ist serverseitiger Code niemals nützlich, oft genug aber hinderlich. Poste *NIE* serverseitigen Code bei clientseitigen Problemen.
Alles klar, hier die HTML-Version:
<td><a href="/typo3/index.php?id=3&action=download&datei=28" onmouseover=document.location.href="index.php?id=3&action=vorschau&bildid=28">kommu.jpg</a></td>
Ist das so gültiger HTML-Code??
2.) Bist Du sicher, tabellarische Daten vorliegen zu haben?
Öhm...ja, ziemlich...wieso? Es wird eine tabellarische Liste mit Infos zu den Dateien angezeigt und diese Liste beinhaltet einen Download-Link, bei dessen "Überfahren" die Vorschau gezeigt werden soll...
5.) Das location-Objekt war noch nie im document-Objekt angesiedelt.
Das heisst? Ist daran was falsch?? Es funktioniert doch... Wie müsste es denn lauten?
Schonmal vielen Dank!
Sonnige Grüße,
Drathy
Hello out there!
<td><a href="/typo3/index.php?id=3&action=download&datei=28" onmouseover=document.location.href="index.php?id=3&action=vorschau&bildid=28">kommu.jpg</a></td>
Ist das so gültiger HTML-Code??
Nein. [HTML401 §B.2.2]
5.) Das location-Objekt war noch nie im document-Objekt angesiedelt.
Das heisst? Ist daran was falsch?? Es funktioniert doch... Wie müsste es denn lauten?
Sich auf Fehlertolerenzen von Browsern zu verlassen, ist nie eine gute Idee. Warum schaust du nicht in der http://de.selfhtml.org/javascript/objekte/index.htm@title=Objektreferenz nach, von welchem Objekt 'location' ein Unterobjekt ist?
See ya up the road,
Gunnar
Hiho!
Hello out there!
<td><a href="/typo3/index.php?id=3&action=download&datei=28" onmouseover=document.location.href="index.php?id=3&action=vorschau&bildid=28">kommu.jpg</a></td>
Ist das so gültiger HTML-Code??Nein. [HTML401 §B.2.2]
Wenn ich das auf die schnelle richtig verstanden habe, spielst Du also auf die '&'-Zeichen an...?! Aber im Endeffekt hat das doch keine Auswirkungen auf meinen MouseOver, oder doch? -.-
Sich auf Fehlertolerenzen von Browsern zu verlassen, ist nie eine gute Idee. Warum schaust du nicht in der http://de.selfhtml.org/javascript/objekte/index.htm@title=Objektreferenz nach, von welchem Objekt 'location' ein Unterobjekt ist?
Geschaut, gefunden: onmouseover=window.location.href=...
Nun aber nochmal zu meinem eigentlichen Problem:
Besteht also nicht die Möglichkeit dieses Problem besonders beim IE irgendwie abzustellen oder zu umgehen?
Danke & Gruß,
Drathy
Moin!
Nun aber nochmal zu meinem eigentlichen Problem:
Besteht also nicht die Möglichkeit dieses Problem besonders beim IE irgendwie abzustellen oder zu umgehen?
Du lädst keine Bilder neu, du lädst komplette HTML-Dokumente neu. Welche mutmaßlich dynamisch generiert werden und deshalb nicht im Cache aufbewahrt werden dürfen.
Ändere das, und alles könnte gut werden.
- Sven Rautenberg
Du lädst keine Bilder neu, du lädst komplette HTML-Dokumente neu. Welche mutmaßlich dynamisch generiert werden und deshalb nicht im Cache aufbewahrt werden dürfen.
Da hast Du natürlich vollkommen Recht! Das ist wohl auch das Problem an der ganzen Sache, da die komplette Seite ja jedes Mal von PHP neu generiert wird.
Ich hatte gestern auch schon überlegt, ob ich es irgendwie realisieren kann, dass nur die Funktion neu aufgerufen wird, und nicht die komplette Seite... Allerdings ist da ja das Problem, dass die Funktion nur aufgerufen wird, wenn bestimmte Parameter beim Aufruf der Seite übergeben werden....und wenn ich es richtig weiß, ist es ja nicht möglich, aus JavaScript heraus (in diesem Fall per onmouseover) eine PHP-Funktion aufzurufen...oder?
Was würdet Ihr denn an meiner Stelle machen? Ist natürlich schwer zu sagen, ohne den Code zu kennen... Habt Ihr trotzdem nen Vorschlag?
Gruß,
Drathy
hi,
Das ist wohl auch das Problem an der ganzen Sache, da die komplette Seite ja jedes Mal von PHP neu generiert wird.
Ich hatte gestern auch schon überlegt, ob ich es irgendwie realisieren kann, dass nur die Funktion neu aufgerufen wird, und nicht die komplette Seite...
Das nützt dir nichts.
PHP gibt per Default entsprechende Anweisungen aus, dass der Scriptoutput bitte nicht gecached werden soll.
Wenn du dies ändern würdest - dann würde aber auch ein kompletter Scriptoutput gecached, und darin könntest du nicht "nur eine Funktion neu aufrufen".
und wenn ich es richtig weiß, ist es ja nicht möglich, aus JavaScript heraus (in diesem Fall per onmouseover) eine PHP-Funktion aufzurufen...oder?
Der Aufruf einer PHP-Funktion ist nicht möglich.
Möglich ist die Anforderung einer Ressource, welche die Ausführung eines PHP-Scriptes bewirkt - aber auch das wird dir hier wenig nützen, s.o.
gruß,
wahsaga
Das nützt dir nichts.
PHP gibt per Default entsprechende Anweisungen aus, dass der Scriptoutput bitte nicht gecached werden soll.
Wenn du dies ändern würdest - dann würde aber auch ein kompletter Scriptoutput gecached, und darin könntest du nicht "nur eine Funktion neu aufrufen".
Hmmm....wenn ich das richtig verstehe, wäre es also eine Einstellung die man direkt in der PHP-Installation ändern müsste...?!? Ich steig da nicht ganz durch - würde mir das nun weiterhelfen? Wobei ich eh denke, dass eine Änderung in der PHP-Installation nicht das Wahre wäre, oder?
Sry., falls das alles dumme Fragen sind, aber ich bin noch relativ grün hinter den Ohren was PHP angeht und was die Konfiguration oder die Architektur (wenn ich das so nennen kann) von PHP angeht, habe ich leider null Ahnung...
Daher noch einmal klipp und klar die Frage: Kann ich das Problem irgendwie lösen, dass beim Aufruf des Links per onmouseover die komplette Seite neu geladen wird, und zwar mit vertretbarem Aufwand bzw. ohne dabei in die PHP-Installation einzugreifen?
Gruß,
Drathy
Moin!
Ich hatte gestern auch schon überlegt, ob ich es irgendwie realisieren kann, dass nur die Funktion neu aufgerufen wird, und nicht die komplette Seite... Allerdings ist da ja das Problem, dass die Funktion nur aufgerufen wird, wenn bestimmte Parameter beim Aufruf der Seite übergeben werden....und wenn ich es richtig weiß, ist es ja nicht möglich, aus JavaScript heraus (in diesem Fall per onmouseover) eine PHP-Funktion aufzurufen...oder?
Wo ist das Problem? Du willst ein Vorschaubild dynamisch ändern? Dann tu das: Weise document.images[bildname].src die neue Bild-URL zu.
Das wird dann vom Server ein neues Bild mit ggf. vollkommen neuen Bildparametern abrufen (sofern es dynamisch generiert wird, und nicht statisch auf dem Server liegt, wird das jedesmal Auswirkungen haben udn eben wieder "neu geladen" werden, was ja durchaus erwünscht sein kann).
Dein Grundsatzfehler ist, dass du gedanklich von einer kompletten HTML-Seite ausgehst, der die jeweils benötigten Anzeigeparameter übergeben werden. Das ist ungünstig (und so ein idiotisches Neuladeverhalten würde wohl jeden User, der nicht mit 100MBit-LAN angebunden ist, recht heftig vertreiben), und der Aufgabe nicht angemessen. Tausche nur das Bild - weil nur das getauscht werden muß.
- Sven Rautenberg
Hi Sven!
Wo ist das Problem? Du willst ein Vorschaubild dynamisch ändern? Dann tu das: Weise document.images[bildname].src die neue Bild-URL zu.
Hast Du zufällig nen Link, damit ich mich da etwas einlesen kann? Ist nämlich ganz neu für mich...
Das wird dann vom Server ein neues Bild mit ggf. vollkommen neuen Bildparametern abrufen (sofern es dynamisch generiert wird, und nicht statisch auf dem Server liegt, wird das jedesmal Auswirkungen haben udn eben wieder "neu geladen" werden, was ja durchaus erwünscht sein kann).
Ursprünglich hatte ich in der Tat den Ansatz (bislang nur geistig) verfolgt, dass ich beim Hochladen der Bilder, gleichzeig Thumbs generiere und diese (statisch) in einem Thumbs-Verzeichnis mit dazugehörigem Datenbankeintrag abspeichere. Aber ich wurde bereits von anderer Seite darauf hingewiesen, dass es bspw. für Zusatzfunktionen sinnvoller ist, die Thumbs bei Bedarf zu generieren und im Cache-Verzeichnis des Servers abzulegen.
Dein Grundsatzfehler ist, dass du gedanklich von einer kompletten HTML-Seite ausgehst, der die jeweils benötigten Anzeigeparameter übergeben werden. Das ist ungünstig (und so ein idiotisches Neuladeverhalten würde wohl jeden User, der nicht mit 100MBit-LAN angebunden ist, recht heftig vertreiben), und der Aufgabe nicht angemessen. Tausche nur das Bild - weil nur das getauscht werden muß.
In der Tat war das mein Grundsatzfehler. Hervorgerufen dadurch, dass ich mir schlichtweg nicht über den Umfang der Möglichkeiten die man mit PHP und Zusatzprogrammen hat, bewusst bin, da ich ja noch Anfänger bin... Daher bin ich dann eben u.A. auf dieses Forum angewiesen, wo mir erfahrene User sagen: So nicht, mach es lieber mit
diesem Ansatz!
Dann mach ich mich nun mal an die Arbeit auch wenn ich grad noch gar nicht weiß, wo ich Beginnen soll...^^
Bei Fragen/Problemen (die leider mit Sicherheit kommen werden) werdet Ihr hier von mir hören... ;-)
Viele Grüße & nochmal ein Danke,
Drathy
hi,
Du willst ein Vorschaubild dynamisch ändern? Dann tu das: Weise document.images[bildname].src die neue Bild-URL zu.
Hast Du zufällig nen Link, damit ich mich da etwas einlesen kann? Ist nämlich ganz neu für mich...
Beschreibung der images-Collection, parktisches Anwendungsbeispiel
gruß,
wahsaga
Hallo.
parktisch
Nicht zu verwechseln mit "Parkbank".
MfG, at
Grundlage für Zitat #403.
Hehe...irgendwo hast Du schon Recht... ;-)
Hello out there!
<td><a href="/typo3/index.php?id=3&action=download&datei=28" onmouseover=document.location.href="index.php?id=3&action=vorschau&bildid=28">kommu.jpg</a></td>
Wenn ich das auf die schnelle richtig verstanden habe, spielst Du also auf die '&'-Zeichen an...?!
Ja. Die fehlenden Anführungszeichen hatte ich auf die Schnelle übersehen.
Aber im Endeffekt hat das doch keine Auswirkungen auf meinen MouseOver, oder doch? -.-
Vermutlich nicht, korrigieren solltest du es dennoch unbedingt.
See ya up the road,
Gunnar
Ja. Die fehlenden Anführungszeichen hatte ich auf die Schnelle übersehen.
Nanu, bin ich blind...wo fehlen da denn Anführungszeichen...
Vermutlich nicht, korrigieren solltest du es dennoch unbedingt.
Bewirkt die Funktion urlencode() das, was zu korrigieren ist? Oder liege ich mal wieder komplett daneben?
Gruß,
Drathy
hi,
Ja. Die fehlenden Anführungszeichen hatte ich auf die Schnelle übersehen.
Nanu, bin ich blind...wo fehlen da denn Anführungszeichen...
Um den Wert des Attributes onmouseover.
gruß,
wahsaga
Hello out there!
Nanu, bin ich blind...wo fehlen da denn Anführungszeichen...
Um den Wert des Attributes onmouseover.
Wie [Sven] schon sagte und in [HTML401 §3.2.2] nachzulesen ist.
See ya up the road,
Gunnar
Hi!
Erst einmal muss ich mal zwischendurch loswerden: FETTES DANKE an alle, dass Ihr so geduldig mit mir seid und wirklich hilfsbereit!!!
Um den Wert des Attributes onmouseover.
Auf die Gefahr hin, dass ich mich nun vollends blamiere, ich habe es so versucht:
<a href="/typo3/index.php?id=3&action=download&datei=27" onmouseover="window.location.href="index.php?id=3&action=vorschau&bildid=27"">
Das hat natürlich nicht funktioniert, ich vermute, da ja hinter "href" schon Anführungszeichen stehen und diese die neu hinzugefügten somit wieder schließen... Könnte mir nicht bitte jemand anhand des obigen Linkes zeigen, wie die Anfühsrungszeichen gesetzt werden müssen...
Gruß,
Drathy
Hello out there!
Auf die Gefahr hin, dass ich mich nun vollends blamiere, ich habe es so versucht:
<a href="/typo3/index.php?id=3&action=download&datei=27" onmouseover="window.location.href="index.php?id=3&action=vorschau&bildid=27"">
Das hat natürlich nicht funktioniert, ich vermute, da ja hinter "href" schon Anführungszeichen stehen und diese die neu hinzugefügten somit wieder schließen...
Richtig vermutet.
Könnte mir nicht bitte jemand anhand des obigen Linkes zeigen, wie die Anfühsrungszeichen gesetzt werden müssen...
Auch das steht in [HTML401 §3.2.2]. Würdest du das endlich mal lesen?
See ya up the road,
Gunnar
Auch das steht in [HTML401 §3.2.2]. Würdest du das endlich mal lesen?
Gelesen hatte ich es schon, nur anscheinend nicht aufmerksam genug. Sorry dafür, aber die Hitze hier und das "Gebrabbel" meiner Kollegen rauben mir etwas die Konzentration...
Aufgrund der Passage "Einfache Anführungszeichen können im Attributwert enthalten sein, wenn der Wert durch doppelte Anführungszeichen begrenzt ist und umgekehrt." habe ich nun folgendes Attribut in den funktionstüchtigen Link eingebaut... Damit klappt es auch und ich hoffe, ich hab es nun endlich alles richtig...
onmouseover='window.location.href="index.php?id=3&action=vorschau&bildid=24"'
Gruß,
Drathy
Hello out there!
aber die Hitze hier und das "Gebrabbel" meiner Kollegen rauben mir etwas die Konzentration...
Bei den enormen Übeln kann man wohl nicht mal sagen, welches das kleinere ist.
ich hoffe, ich hab es nun endlich alles richtig...
onmouseover='window.location.href="index.php?id=3&action=vorschau&bildid=24"'
Syntaktisch ja. Ob die einfachen Anführungszeichen außen sind und die doppelten innen oder andersrum, ist Geschmackssache.
Ich halte es aber für problematisch, per 'onmouseover' eine neue Ressource zu laden. Aber das wird ja an anderer Stelle im Thread thematisiert.
See ya up the road,
Gunnar
hi,
<a href="/typo3/index.php?id=3&action=download&datei=27" onmouseover="window.location.href="index.php?id=3&action=vorschau&bildid=27"">
Das hat natürlich nicht funktioniert, ich vermute, da ja hinter "href" schon Anführungszeichen stehen und diese die neu hinzugefügten somit wieder schließen... Könnte mir nicht bitte jemand anhand des obigen Linkes zeigen, wie die Anfühsrungszeichen gesetzt werden müssen...
Ich kann dir einen Link zeigen:
http://de.selfhtml.org/javascript/sprache/notationen.htm#zeichenketten
gruß,
wahsaga
Moin!
<td><a href="/typo3/index.php?id=3&action=download&datei=28" onmouseover=document.location.href="index.php?id=3&action=vorschau&bildid=28">kommu.jpg</a></td>
Ist das so gültiger HTML-Code??
Nein. Gibt es eine Entity "&action;"? Warum schließt du nicht die gesamten Attributwerte (insbesondere onmouseover) insgesamt in Anführungszeichen ein?
5.) Das location-Objekt war noch nie im document-Objekt angesiedelt.
Das heisst? Ist daran was falsch?? Es funktioniert doch... Wie müsste es denn lauten?
Ohne Bremse in einer Seifenkiste zu fahren "funktioniert" auch - bis man die Bremse dann doch mal braucht.
- Sven Rautenberg
Hi!
<td><a href="/typo3/index.php?id=3&action=download&datei=28" onmouseover=document.location.href="index.php?id=3&action=vorschau&bildid=28">kommu.jpg</a></td>
Ist das so gültiger HTML-Code??Nein. Gibt es eine Entity "&action;"? Warum schließt du nicht die gesamten Attributwerte (insbesondere onmouseover) insgesamt in Anführungszeichen ein?
Oha, oha, da hab ich anscheinend noch so einiges zu Lernen! ;-) Aber wenn ich Deine Anmerkung richtig deute, dann könnte es bei einer solchen URL ggf. Probleme geben, da der Browser(?) das '&'-Zeichen als Beginn einer Entity ansehen könnte, richtig? Schließe ich daraus richtig, dass ich zunächst auf die URL die Funktion urlencode() anwenden sollte?
Ohne Bremse in einer Seifenkiste zu fahren "funktioniert" auch - bis man die Bremse dann doch mal braucht.
Hehe, sehr gutes Beispiel!!! Hab mittlerweile schon rausgefunden, dass es anscheinend "window.location.href=..." heissen müsste...
Danke.
Gruß,
Drathy
Hallo Drathy.
Schließe ich daraus richtig, dass ich zunächst auf die URL die Funktion urlencode() anwenden sollte?
Möchtest du die URL für den HTTP- oder für den HTML-Kontext aufbereiten?
Genau, letzteres ist der Fall, also brauchst du hier htmlentities.
Einen schönen Dienstag noch.
Gruß, Ashura
Hello out there!
Genau, letzteres ist der Fall, also brauchst du hier htmlentities.
Oder schreibst einfach '&'.
Oder verwendest am besten ';' statt '&' als Trennzeichen, wie du es schon in [HTML401 §B.2.2] gelesen hast.
See ya up the road,
Gunnar
Super, vielen Dank Euch Beiden - wieder was gelernt!!