Pop-up Probleme
Alf
- javascript
Hallo,
ich habe mir ein script gemacht, dass ein neues Fenster öffnet, dieses wird durch onclick in einem <a> element aktiviert, dabei wird auch der href wert das a elements mitgenommen.
Das ganze ist für eine Bildergalerie, wo beim klicken eines thumbs ein pop-up mit dem Bildchen kommt.
Das Fenster wird zwar geöffnet, aber das normale Fenster geht auch auf das href, und das möchte ich nicht, es soll auf der Seite bleiben wo die thumbs zu sehen sind.
Wie geht das?
Wie sieht denn dein Aufruf genau aus? Wahrscheinlich hast du irgendwas in dem href stehen, was diesen Effekt erzeugt. Versuchs mal so:
<a href="#" onClick="neuesFenster(Bilddatei)">Anzeigen</a>
oder
<a href="javascript:neuesFenster(Bilddatei)">Anzeigen</a>
(So ging es glaub ich. Hab ich lange nicht benutzt.)
Hi,
da hätte ich zwei Anmerkungen:
<a href="#" onClick="neuesFenster(Bilddatei)">Anzeigen</a>
Das sorgt dafür, dass Nutzer mit deaktiviertem JavaScript gar nichts zu sehen bekommen, bzw. die Seite, sofern gescrollt werden kann, an den Anfang zurückspringt.
<a href="javascript:neuesFenster(Bilddatei)">Anzeigen</a>
Das hier verwendet die Gnädigkeit der Browser; Auch hier wird keine Alternative zum JavaScript geboten, noch dazu verlagerst du die Abarbeitung von JavaScript in den Nicht-JavaScript-Teil des Links.
MfG
Rouven
Hi,
Wie geht das?
beende die Abarbeitung des Anchors, indem du am Ende des JavaScript-Aufrufes ein "return false;" platzierst.
MfG
Rouven
beende die Abarbeitung des Anchors, indem du am Ende des JavaScript-Aufrufes ein "return false;" platzierst.
Meinst du im onclick oder in der .js datei?
Ich hab mal so gemacht onclick="show(this.href); return false;",
ging aber nicht und in der .js datei ans ende der Funktion
ging auch nicht.
Hi,
Ich hab mal so gemacht onclick="show(this.href); return false;",
na ja, das ist eigentlich die Variante die klappen sollte. Alternativ mach mal als letzte Zeile in show() ein return false und ändere das Konstrukt hier in
onclick="return show(this.href);"
MfG
Rouven
hmm, ich weis jetzt nicht was der Fehler war,
aber jetzt fnktioniert es.
Kann mir noch jemand sagen wie man die größe
eines Bildes (x-pixel und y-pixel) mit JS
auslesen kann?
Und wie funktioniert das dynamische zuweisen von einem onclick
event?
Links zu entsprechenden Tutorials wären auch hilfreich.
Hallo Alf.
Kann mir noch jemand sagen wie man die größe
eines Bildes (x-pixel und y-pixel) mit JS
auslesen kann?
Verschaffe dir Zugriff auf dieses Bild (per document.images, getElementById oder getElementsByTagName) und schau dir die height- bzw. width-Eigenschaft dieses Bildes an.
Und wie funktioniert das dynamische zuweisen von einem onclick
event?
Fast äquivalent. Verschaffe dir erneut Zugriff auf das jeweilige Element und weise seiner onclick-Eigenschaft den jeweiligen Ausdruck zu.
Folgendes ist hierbei möglich (ich gehe hier einmal weiterhin von einem Bild aus):
function foo() {
alert('foo called');
}
document.images[0].onclick = foo;
Alternativ:
document.images[0].onclick = function() {
alert('anonymous function called');
}
Bei beiden wird dem allerersten Bild im Dokument eine Aktion zugewiesen, die ausgeführt werden soll, wenn auf dieses geklickt wird.
Es gibt noch eine weitere Möglichkeit mit Hilfe des Function-Objektes, aber diese dürfte dir hier nicht weiterhelfen.
Links zu entsprechenden Tutorials wären auch hilfreich.
Das hiesige Archiv ist bezüglich dieses Themas sehr gesprächig, gute Stichwörter sind „onclick“, „Eventhandler“, „dynamisch zuweisen“.
Einen schönen Donnerstag noch.
Gruß, Ashura
Ich wollte eigentlich die Bildgröße von der Datei herholen (zb bild.jpg), hab jetzt aber mal mit document.images["image"] versucht die Größe zu holen - das möchte ich übrigens um das popupfenster der Bildgröße anzupassen. Geht aber nicht, der schreibt in meine variable xsize trotzdem "undefined"
script:
function show(pic)
{
var win = window.open("about:blank", "showImage", "dependent=yes,location=no,menubar=no,resizable=no,width=370,height=278,left=100,top=200,toolbar=no,status=no");
win.focus();
win.document.open();
win.document.writeln("<head><title>showImage</title>");
win.document.writeln("<link rel='stylesheet' type='text/css' title='Stylesheet' href='style.css' media='screen' /></head><body style='margin: 0;'>");
win.document.writeln("<a href='#' onclick='window.close(); return false;' title='click to close'><img src='"+pic+"' name='image' ></a>");
ysize = win.document.images["image"].height;
win.document.writeln(xsize);
win.document.writeln("</body></html>");
win.document.close();
return false;
}
Und wie kann ich all meinen Bildern im Dokument, die class="thumb" haben das event zuweisen?
Hallo Alf.
[…] hab jetzt aber mal mit document.images["image"] versucht die Größe zu holen - das möchte ich übrigens um das popupfenster der Bildgröße anzupassen. Geht aber nicht, der schreibt in meine variable xsize trotzdem "undefined"
Ich glaube, hier liegt noch ein Verständnisproblem vor: du kannst per JS die Dimensionen von Grafiken erst dann auslesen, wenn sie dem Client bekannt sind, sprich: wenn die jeweilige Grafik fertig geladen ist. Da in deinem Script zu diesem Zeitpunkt die Grafik aber noch nicht einmal im Dokument existiert, kannst du folgerichtig weder auf sie zugreifen, noch ihre Dimensionen auslesen. Nachträglich kannst du sie zwar wie beschrieben ermitteln, aber dann brauchst du sie sowieso nicht mehr, da die Grafik ja schon ins Dokument geschrieben und geladen wurde.
function show(pic)
{
[…]
}
Warum machst du dir eigentlich so viel Umstände und öffnest nicht einfach nur ein Popup mit der jeweiligen Grafik oder machst es sogar noch besser?
Und wie kann ich all meinen Bildern im Dokument, die class="thumb" haben das event zuweisen?
Durchlaufe mit einer Schleife alle Bilder (per document.images oder document.getElementsByTagName('img'); bei beiden hast du Zugriff auf die length-Eigenschaft).
In dieser Schleife überprüfst du, ob die Klasse (per className) mit dem Wert „thumb“ übereinstimmt und setzt bei Zutreffen wie beschrieben den Wert für die onclick-Eigenschaft.
Einen schönen Donnerstag noch.
Gruß, Ashura
Ich glaube, hier liegt noch ein Verständnisproblem vor: du kannst per JS die Dimensionen von Grafiken erst dann auslesen, wenn sie dem Client bekannt sind [...]
Ich hab doch im script noch vor dem Auslesen der Größe das Bild geladen.
Warum machst du dir eigentlich so viel Umstände und öffnest nicht einfach nur ein Popup mit der jeweiligen Grafik [...]
Weil das popup genau die Größe des Bildes haben soll und nicht überstehen soll und nicht kleiner als es sein.
Wie krieg ich nun die Bildgröße, weil ich will dann dass das Bild geladen wird und zwar in einem Fenster von vll 200*200px und dann möchte ich mit der Größe des Bildes das Fenster anpassen.
Hallo Alf.
Ich hab doch im script noch vor dem Auslesen der Größe das Bild geladen.
Ja, stimmt. Hm, ich sehe gerade, dass das document.images-Objekt von „win“ im Firefox zwar definiert ist, aber eine Länge von 0 hat, egal zu welchem Zeitpunkt. Solange dies der Fall ist, kannst du hier nicht darauf zurück greifen. Im Opera und IE dagegen ist die Länge wie erwartet 1 …
Auch sehr merkwürdig:
alert(win.document.documentElement.innerHTML);
alert(win.document.documentElement.innerHTML);
Fügt man dies nach „win.document.close();“ ein, so erhält man verschieden Ausgaben; im Firefox einmal nur den Inhalt des head-Elementes und gleich darauf den gesamten Inhalt des Dokumentes, im Opera wird zweiteres per JS-Fehler quittiert und im IE ist beides identisch.
Weil das popup genau die Größe des Bildes haben soll und nicht überstehen soll und nicht kleiner als es sein.
All dies kannst du bequem mit der von mir verlinkten Lightbox erreichen.
Wie krieg ich nun die Bildgröße, weil ich will dann dass das Bild geladen wird und zwar in einem Fenster von vll 200*200px und dann möchte ich mit der Größe des Bildes das Fenster anpassen.
Du kannst normalerweise, nachdem du das Dokument per document.close(); geschlossen hast, auf alle Objekte darin zugreifen.
Dies kannst du im Opera und IE auch per „alert(win.document.images[0].height);“ kontrollieren, hier erhältst du die Höhe deines Bildes.
So leid es mir tut, aber ich weiß nicht, warum Firefox sich hier quer stellt.
Einen schönen Donnerstag noch.
Gruß, Ashura
All dies kannst du bequem mit der von mir verlinkten Lightbox erreichen.
Lightbox kenne ich, aber das will ich nicht...
Du kannst normalerweise, nachdem du das Dokument per document.close(); geschlossen hast, auf alle Objekte darin zugreifen.
Ich kann hab das ganze jetzt soweit, dass nachdem öffnen des fensters es in der größe angepasst wird, aber nur wenn ich einen Zahlenwert bei win.window.resizeTo(400,400); eingebe, mit der Bildgröße wie es jetzt im script steht funktioniert es nicht, bzw. das pop-up kommt aber es passt seine Größe nicht ans bild an und das Hauptfenster folgt dem <a href="">...
Was ist jetzt noch bei dem resize falsch, stimmt die Eingabe für die Bildgröße nicht(win.document.images[0].width)?
script:
function show(pic)
{
var win = window.open("about:blank", "showImage", "dependent=yes,location=no,menubar=no,resizable=no,width=200,height=200,left=100,top=200,toolbar=no,status=no");
win.focus();
win.document.open();
win.document.writeln("<head><title>showImage</title>");
win.document.writeln("<link rel='stylesheet' type='text/css' title='Stylesheet' href='style.css' media='screen' /></head><body style='margin: 0;'>");
win.document.writeln("<a href='#' onclick='window.close(); return false;' title='click to close'><img src='"+pic+"' ></a>");
win.document.writeln("</body></html>");
win.document.close();
win.window.resizeTo(win.document.images[0].width,win.document.images[0].height);
return false;
}
Hallo Alf.
[…] das pop-up kommt aber es passt seine Größe nicht ans bild an und das Hauptfenster folgt dem <a href="">...
Was ist jetzt noch bei dem resize falsch, […]?
Die Größe wird in IE und Opera durchaus angepasst. Im Firefox natürlich nicht.
Bei zweiterem schätze ich, dass du einfach nur onclick="show('bild.png')" geschrieben hast, anstatt onclick="return show('bild.png'). Nur bei letzterem wird der Wert „false“ wie gewollt zurück gegeben.
Einen schönen Donnerstag noch.
Gruß, Ashura
Die Größe wird in IE und Opera durchaus angepasst. Im Firefox natürlich nicht.
Bei zweiterem schätze ich, dass du einfach nur onclick="show('bild.png')" geschrieben hast, anstatt onclick="return show('bild.png'). Nur bei letzterem wird der Wert „false“ wie gewollt zurück gegeben.
Ich habe return show('bild.png') verwendet und der href wird auch nur ausgeführt, wenn win.document.images[0].width anstatt eines zahlenwertes im resize steht. Kann ich jetzt das noch irgendwie hinbekommen, dass der firefox das fenster resized.
Btw: Wie öffne ich meinen IE, seit dem SP2 ist der nämlich verschwunden (nicht mehr in c:programme\internetexplorer) und über mein Firefox plugin wo die aktuelle seite im IE öffnen soll kommt auch nur ein Fehler, dass der IE nicht gefunden wurde. Ich kann nur im Startmenü den IE als Internet browser angeben, dann ist eine verknüpfung ja dort drinne. Rechtsklick und öffnen mit IE gibts auch nicht mehr.
Hallo Alf.
Ich habe return show('bild.png') verwendet und der href wird auch nur ausgeführt, wenn win.document.images[0].width anstatt eines zahlenwertes im resize steht.
Kann ich zwar nicht bestätigen, aber das hilft dir auch nicht weiter.
Kann ich jetzt das noch irgendwie hinbekommen, dass der firefox das fenster resized.
So lange du nicht während oder nach dem Öffnen des Popups Zugriff auf document.images[0] erhalten kannst, wird daraus wohl nichts.
Btw: Wie öffne ich meinen IE, seit dem SP2 ist der nämlich verschwunden (nicht mehr in c:programme\internetexplorer)
Wie verschwunden? Das Verzeichnis „%programfiles%\Internet Explorer“ existiert nicht mehr? Hast du sämtliche Anzeigeoptionen in den Ordneroptionen angemessen eingestellt? Es ist üblicherweise keine Eigenschaft des SP2, den IE zu entfernen. (Auch wenn sich manch einer darüber freuen würde.)
und über mein Firefox plugin wo die aktuelle seite im IE öffnen soll kommt auch nur ein Fehler, dass der IE nicht gefunden wurde. Ich kann nur im Startmenü den IE als Internet browser angeben, dann ist eine verknüpfung ja dort drinne.
Und kannst du ihn über diese Verknüpfung ausführen? Wenn ja, dann schau in den Eigenschaften nach, wohin sie führt.
Wenn nicht, geht „iexplore“ unter „Ausführen“?
Rechtsklick und öffnen mit IE gibts auch nicht mehr.
Dies könntest du beheben, in dem du unter „Öffnen mit“ die Programmliste aufrufst und den IE dort auswählst. Danach sollte er in der kurzen Liste direkt im Kontextmenü erscheinen.
Einen schönen Freitag noch.
Gruß, Ashura
Wie verschwunden? Das Verzeichnis „%programfiles%\Internet Explorer“ existiert nicht mehr? Hast du sämtliche Anzeigeoptionen in den Ordneroptionen angemessen eingestellt? Es ist üblicherweise keine Eigenschaft des SP2, den IE zu entfernen. (Auch wenn sich manch einer darüber freuen würde.)
Den IE kann ich ja noch ausführen, wenn ich in zb ins startmenu setze,
oder das desktop element vom IE in desktop-eigenschaften einstelle. Der Ordner Programme\Internet Explorer ist zwar noch da, aber keine iexplorer.exe (falls die so heist) nur eine iedw.exe
Wenn nicht, geht „iexplore“ unter „Ausführen“?
Das geht auch. Der IE ist ja noch drauf nur ist er nicht mehr im öfnnen mit aufeführt (bei rechtsklick auf eine html datei) und die exe für den IE kann ich nirgends finden (versteckte dateien werden angezeigt).
Dies könntest du beheben, in dem du unter „Öffnen mit“ die Programmliste aufrufst und den IE dort auswählst. Danach sollte er in der kurzen Liste direkt im Kontextmenü erscheinen.
Da erscheint er ja auch nicht und ich kann ja auch nicht durchsuchen da ich nicht weis wo die exe von dem sein soll (falls eine vorhanden ist, vll wird IE jetzt vom windows explorer ausgeführt, ka).
Hallo Alf.
Der Ordner Programme\Internet Explorer ist zwar noch da, aber keine iexplorer.exe (falls die so heist) nur eine iedw.exe
Laut WinTotal ist dies zumindest kein Schädling.
Wenn nicht, geht „iexplore“ unter „Ausführen“?
Das geht auch.
Dann liegt sie entweder nach wie vor im Programmverzeichnis oder wurde an eine andere Stelle verschoben, wo sie im %PATH% liegt.
Der IE ist ja noch drauf nur ist er nicht mehr im öfnnen mit aufeführt (bei rechtsklick auf eine html datei) …
Auch nicht in der Liste, welche du über [Öffnen mit] → [Programm auswählen …] erreichen kannst? (Zweitere Bezeichnung fiel mir vorhin nicht mehr ein.)
… und die exe für den IE kann ich nirgends finden (versteckte dateien werden angezeigt).
Und auch „Geschützte Systemdateien ausblenden“ ist deaktiviert. (Ist beim IE normalerweise nicht erforderlich, aber hier könnte es vielleicht helfen.)
Da erscheint er ja auch nicht und ich kann ja auch nicht durchsuchen da ich nicht weis wo die exe von dem sein soll (falls eine vorhanden ist, vll wird IE jetzt vom windows explorer ausgeführt, ka).
Hast du die „iexplore.exe“ schon über die Windows-Suche versucht zu finden?
(Dort unbedingt in den „Erweiterten Optionen“ die ersten drei Optionen aktivieren.)
Einen schönen Freitag noch.
Gruß, Ashura
Dann liegt sie entweder nach wie vor im Programmverzeichnis oder wurde an eine andere Stelle verschoben, wo sie im %PATH% liegt.
Im Ordner C:\WINDOWS\ServicePackFiles\i386 ist die iexplore.exe
Auch nicht in der Liste, welche du über [Öffnen mit] → [Programm auswählen …] erreichen kannst? (Zweitere Bezeichnung fiel mir vorhin nicht mehr ein.)
Bei öffnen mit wird kein IE angezeigt, ich habe auch schon durchsuchen geklickt und die iexplore.exe ausgewählt, aber das übernimmt er dann nicht bzw. der IE ist dann immernoch nicht in der liste.
Seit dem SP2 hab ich auch das Problem, dass meine Symbolleisten rechts die ich erstellt habe nicht mehr veränderbar/schließbar sind. Also ich kann sie zwar verändern und schließen, aber nach einem neustart sind sie wieder an der selben stelle wie vorher... Und keiner weis wie man die wegbekommt - für mich sieht das so aus als ob mein windows die Änderungen an den symbolleisten nicht speichert... Microsoft kann man ja auch nicht fragen, die kommen gleich mit nem Vertrag und ab der dritten Frage muss man 99€ zahlen...
Hallo Alf.
Dann liegt sie entweder nach wie vor im Programmverzeichnis oder wurde an eine andere Stelle verschoben, wo sie im %PATH% liegt.
Im Ordner C:\WINDOWS\ServicePackFiles\i386 ist die iexplore.exe
Ja, das ist das Backup der iexplore.exe im Stadium vom SP1. Die nützt dir hier aber nichts.
Bei öffnen mit wird kein IE angezeigt, ich habe auch schon durchsuchen geklickt und die iexplore.exe ausgewählt, aber das übernimmt er dann nicht bzw. der IE ist dann immernoch nicht in der liste.
Wirklich sehr merkwürdig.
Mir fallen noch ein paar Möglichkeiten ein:
SFC und Reinstallation über die *.inf
Komplette Neuinstallation.
Microsoft kann man ja auch nicht fragen, die kommen gleich mit nem Vertrag und ab der dritten Frage muss man 99€ zahlen...
Brauchst du denn drei Fragen? An sich könntest du das Problem ggf. mit einem einzigen Anruf lösen.
Einen schönen Freitag noch.
Gruß, Ashura
Was ist jetzt noch bei dem resize falsch, stimmt die Eingabe für die Bildgröße nicht(win.document.images[0].width)?
script:
function show(pic)
{
var win = window.open("about:blank", "showImage", "dependent=yes,location=no,menubar=no,resizable=no,width=200,height=200,left=100,top=200,toolbar=no,status=no");
win.focus();
win.document.open();
win.document.writeln("<head><title>showImage</title>");
win.document.writeln("<link rel='stylesheet' type='text/css' title='Stylesheet' href='style.css' media='screen' /></head><body style='margin: 0;'>");
win.document.writeln("<a href='#' onclick='window.close(); return false;' title='click to close'><img src='"+pic+"' ></a>");
win.document.writeln("</body></html>");
win.document.close();
win.window.resizeTo(win.document.images[0].width,win.document.images[0].height);
Es ist so wie Ashura schon sagte, das Bild ist hier mit grosser Sicherheit noch nicht fertig dargestellt/geladen, du kannst also nich nicht die Größe des Bildes ermitteln. Es gibt mehrere Möglichkeiten aber auf jeden Fall kannst du den onload Event des Bildes nutzen.
Ich hab hier eine Fotopopup http://javascript.jstruebig.de/skripte/7/ das diese Technik verwendet.
Struppi.