Popups
Oli
- javascript
1 Rouven0 Felix Riesterer
0 Rouven0 Ashura0 Ingo Turski
Hi,
ich will ein Popup mit von mir vorgegebenen Ausmassen öffnen. Das regle ich über Javascript. Damit aber auch Besucher ohne Javascript das Popup zu sehen bekommen, nutze ich diese Lösung:
<a href="popup.html" target="_blank" onclick="fenster(this.href, 450, 450); return false">Popup</a>
Das zugehörige Javascript sieht so aus, also nichts Ungewöhnliches:
function fenster(url, breite, hoehe){
fenster = window.open(url, "popup", "width="+breite+",height="+hoehe+",status=yes,scrollbars=yes,resizable=yes");
fenster.focus();
}
Jetzt funktioniert das mit eingeschaltetem Javascript genau einmal, dass er mir die Seite mit meinen vordefinierten Grössenwerten öffnet. Schließe ich das Fenster aber und klicke den Link ein zweites Mal an, öffnet er ein normales Fenster, greift also auf das normale href und nicht mehr auf onclick zu. Erst wenn ich die Seite neu lade funktioniert es wieder - genau ein Mal. Wer kann sich da einen Reim drauf machen, warum das nicht immer tut?
Hi,
function fenster(url, breite, hoehe){
fenster = window.open(url, "popup", "width="+breite+",height="+hoehe+",status=yes,scrollbars=yes,resizable=yes");
Fällt dir an diesen beiden Zeilen irgendwas auf? Kleiner Tipp, es hat was mit Namen zu tun. Ich nehme an, der Browser überschreibt deine Funktion Fenster nach dem ersten Aufruf mit dem Ergebnis von window.open (oder versucht es zumindest), so dass nachfolgende Aufrufe fehlschlagen. Probier mal aus die Variable anders zu nennen.
MfG
Rouven
Lieber Rouven,
function fenster(url, breite, hoehe){
fenster = window.open(url, "popup", "width="+breite+",height="+hoehe+",status=yes,scrollbars=yes,resizable=yes");
[...] Probier mal aus die Variable anders zu nennen.
oder das Wörtchen "var" vor den Variablennamen setzen. Dadurch wird "fenster" innerhalb der Funktion "fenster" eine sogenannte lokale Variable, die nur innerhalb dieser Funktion existiert und somit selbige auch nicht überschreiben kann.
var fenster = window.open(url, 'popup', 'blah');
Es ist absolut sinnvoll und meines Wissens auch guter Programmierstil, wenn es geht _immer_ lokale Variablen zu verwenden, um eben solchen Konflikten (man denke nur an ein "Nebeneinander" verschiedener Scripte verschiedener Autoren) zu vermeiden.
Ach ja: Popups könnten als böse empfunden werden - näheres im Archiv!
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hi Felix,
oder das Wörtchen "var" vor den Variablennamen setzen. Dadurch wird "fenster" innerhalb der Funktion "fenster" eine sogenannte lokale Variable, die nur innerhalb dieser Funktion existiert und somit selbige auch nicht überschreiben kann.
ja, aber da hab ich eine abgrundtiefe Abneigung gegen, ich sag dir auch gerne warum: Es will einfach nicht in meinen Kopf, warum ich konträr zu z.B. PHP ein Schlüsselwort hinzufügen soll um meine Variable lokal zu halten. Das geht gegen meinen OO-Geist. Da ich jedesmal vergesse, ob var lokal oder eben global war lasse ich lieber die Finger davon.
BTW: Was bewirkt ein var xyz im <head>? Ist das ein Sinnloskonstrukt?
MfG
Rouven
Hallo Rouven.
Es will einfach nicht in meinen Kopf, warum ich konträr zu z.B. PHP ein Schlüsselwort hinzufügen soll um meine Variable lokal zu halten. Das geht gegen meinen OO-Geist.
Du verwendest also weder public noch protected noch private?
Einen schönen Samstag noch.
Gruß, Ashura
Hello,
Du verwendest also weder public noch protected noch private?
ich entscheide mich bewusst für eine der drei Varianten aus dem Pflichtgefühl heraus es explizit angeben zu sollen - bei JavaScript fehlt das entsprechende Pendant für var (global o.ä.). Sollte ich keine Angabe wählen lande ich bei einem akzeptablen private/protected-Gemisch, habe aber keine Variable offen, d.h. wenn ich nichts mache, mache ich zumindest nichts falsch. In JavaScript hingegen mache ich was falsch (Verletzung der Kapselung) wenn ich nichts mache, das finde ich irgendwie vom Design der Sprache her unschön - nicht falsch, aber unschön.
MfG
Rouven
hi,
Du verwendest also weder public noch protected noch private?
ich entscheide mich bewusst für eine der drei Varianten aus dem Pflichtgefühl heraus es explizit angeben zu sollen - bei JavaScript fehlt das entsprechende Pendant für var (global o.ä.).
Was haben public, protected oder private in PHP damit zu tun, ob eine Variable global ist?
gruß,
wahsaga
Hi,
oder das Wörtchen "var" vor den Variablennamen setzen. Dadurch wird "fenster" innerhalb der Funktion "fenster" eine sogenannte lokale Variable, die nur innerhalb dieser Funktion existiert und somit selbige auch nicht überschreiben kann.
ja, aber da hab ich eine abgrundtiefe Abneigung gegen, ich sag dir auch gerne warum: Es will einfach nicht in meinen Kopf, warum ich konträr zu z.B. PHP ein Schlüsselwort hinzufügen soll um meine Variable lokal zu halten.
Du siehst das falsch. Es geht doch darum, Variablen überhaupt zu deklarieren. Ich empfinde es als Unsitte, dass dies in PHO nicht nötig ist und initialisiere sie zumindest ($variable = ...) - fände es aber angebrachter, wenn es auch in PHP dazu ein Schlüsselwort gäbe.
Dennoch finde ich es auch bei Javascript nicht schön, dass Variablen innerhalb einer Funktion nicht deklariert werden müssen und dies dann als Anhaltspunkt für eine globale Gültigkeit gesehen wird.
freundliche Grüße
Ingo