1Danke
ERLEDIGT
JA
JA
ANTWORTEN
11
11
ZUGRIFFE
667
667
EMPFEHLEN
-
06.07.10 11:26 #1
- Registriert seit
- Apr 2004
- Ort
- Die heimliche Hauptstadt des Bieres
- Beiträge
- 579
Hallo,
in einer Seie verwende ich als Popup Kalender den Tigra Calender. Damit ein Steuerblock, in dem dieser kalender verwendet wird, nicht ständig im Blickfeld liegt, will ich ihn mit diesem Script ein- bzw. ausblenden.
Das Script an sich funktioniert, wenn aber der Kalender eingebunden ist, muß ich beim ersten Einblenden zwei Mal auf den Link klicken. Bei jedem weiteren Aufruf reicht dann ein Klick.HTML-Code:<script language="JavaScript"> function einblenden() { with(document.getElementById('filterbox').style){ if(display=="none"){ display="inline"; } else{ display="none"; } } } </script> <a href="#" onClick="einblenden(); return false;"> Ein-/Ausblenden </a>
Wie kann ich diesen ersten Doppelklick vermeiden?Think Different.
-
06.07.10 11:42 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Ich könnte mir vorstellen das vor dem ersten Aufruf die display Eigenschaft trotz unsichtbarkeit != none ist.
Was dazu führt das beim ersten klick else{ display="none"; } ausgeführt wird und display auf none gesetzt wird.
Und damit erst beim zweiten klick if(display=="none"){ ausgeführt wird.
Folglich solltest du mal den Initialwert von display checken.In order to understand recursion, one must first understand recursion.
-
HTML-Code:
<script type="text/javascript"> function einblenden(link) { var display = document.getElementById('filterbox').style.getAttribute("display", false); if(display=="inline"){ document.getElementById('filterbox').style.setAttribute("display", "none", true); link.title = "Kalender einblenden"; } else{ document.getElementById('filterbox').style.setAttribute("display", "inline", true); link.title = "Kalender ausblenden"; } return false; } </script> <a id="CalSwitch" href="Kalender Ein-/Ausblenden" title="Kalender Einblenden" onclick="return einblenden(this);" Ein-/Ausblenden </a>
Geändert von ripkens (06.07.10 um 11:56 Uhr)
-
Drehe den Spiess einfach mal um, und nehme als Bedingung, dass display nicht 'none' ist:
Code :1 2 3 4 5 6 7 8 9 10
function einblenden() { with(document.getElementById('filterbox').style){ if(display!="none"){ display="none"; } else{ display="inline"; } } }
Wenn es nicht angezeigt wird, ist display ja "none".
Wenn es aber angezeigt wird, ist nicht eindeutig, was display ist, es kann einen der von deepthroat genannten Werte haben oder auch garkeinen(JS liefert ja nicht den default-Wert, wenn keiner per inline-CSS gesetzt ist, sondern garnichts)
<edit>Wobei, wenn ichs recht überlege, ist das auch Quatsch
</edit>
-
06.07.10 14:21 #6
- Registriert seit
- Apr 2004
- Ort
- Die heimliche Hauptstadt des Bieres
- Beiträge
- 579
Genau das war es. Mir ist zwar noch immer nicht klar, was das Kalender-Script damit zu tun hat, da weder in dem Script noch im dazugehörenden CSS die display Eigenschaft eingestellt wird, aber egal. Mit einer Zuweisung im Body-Tag geht es jetzt.
Danke für den Tip.HTML-Code:<body onload="document.getElementById('filterbox').style.display = 'none';">Think Different.
-
06.07.10 15:19 #7
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
06.07.10 15:35 #8
- Registriert seit
- Apr 2004
- Ort
- Die heimliche Hauptstadt des Bieres
- Beiträge
- 579
Think Different.
-
06.07.10 15:45 #9Maik Tutorials.de Gastzugang
Hi,
ich nehme an, dass die Formatierung (display:none) für #filterbox in einem zentralen Stylesheet hinterlegt ist.
In diesem Fall müssen in dem Script die display-Werte getauscht werden, damit hier kein doppelter Klick vonnöten ist, bis der Funktionsaufruf greift.
HTML-Code:<script type="text/javascript"> function einblenden() { with(document.getElementById('filterbox').style){ if(display=="inline"){ display="none"; } else{ display="inline"; } } } </script>
Im Umkehrschluß heißt das, dass deine vorgestellte Variante beim ersten Klick ihren Job erledigt, wenn die Formatierung stattdessen im style-Attribut des Elements angegeben wird:
HTML-Code:<div id="filterbox" style="display:none;">...</div>
mfg Maik
-
06.07.10 16:29 #10
- Registriert seit
- Apr 2004
- Ort
- Die heimliche Hauptstadt des Bieres
- Beiträge
- 579
Stimmt, die Formatierung ist in einem zentralen Stylesheet. Die style Variante hab ich gar nicht probiert, da irgendwann es immer dann nicht funktionierte, wenn die JS Datei eingebunden war. Ich habe es jetzt mal direkt per style eingesetzt und da klappt es auch ohne Initialisierung per JS. Muß sich wohl saublöd überschnitten haben.
Think Different.
-
06.07.10 16:59 #11
- Registriert seit
- Aug 2007
- Ort
- Pfalz
- Beiträge
- 219
Ich würde standardmäßig aber nicht unbedingt display:none verwenden.
Sollte bei einem Benutzer JS deaktiviert sein wird er die Filterbox nie zu Gesicht bekommen.
Alternativ kannst du display initial auf inline setzen und in einem onload-Event auf none.
So sehen Benutzer ohne Javascript die Filterbox, Benutzer mit Javascript sehen sie nicht, haben aber die Möglichkeit die box ein- und auszublenden.
Edit: Gerade nachgesehen: Tigra ist ein JS-Kalender.. na dann isses bei Nutzern ohne JS eh Wurst
-
06.07.10 17:13 #12
- Registriert seit
- Apr 2004
- Ort
- Die heimliche Hauptstadt des Bieres
- Beiträge
- 579
Think Different.
Ähnliche Themen
-
Javascripte behindern sich - Alternative?
Von tykee im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 04.09.10, 05:03 -
Google Visualization API und Prototype (Javascripte überschreiben sich gegenseitig?)
Von nCL im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 24.07.10, 14:59 -
Scripts "stören sich gegenseitig"
Von Carrear im Forum Javascript & AjaxAntworten: 17Letzter Beitrag: 14.01.10, 01:44 -
Problem mit W-Lan-Verbindung - können mehrere W-Lans sich gegenseitig stören?
Von Kryptaesthesie im Forum NetzwerkeAntworten: 6Letzter Beitrag: 18.05.09, 07:24 -
Apache2 & PHP <--> XAMPP (stören sich)
Von versuch13 im Forum Hosting & WebserverAntworten: 4Letzter Beitrag: 27.06.06, 08:08





Zitieren

Login





