tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von rd4eva
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
667
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Sprint Sprint ist offline Mitglied Platin
    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.
    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>
    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.
    Wie kann ich diesen ersten Doppelklick vermeiden?
     
    Think Different.

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von Sprint Beitrag anzeigen
    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.
    Wie kann ich diesen ersten Doppelklick vermeiden?
    Die CSS display Eigenschaft kann grundsätzlich 3 Einstellungen haben: block, inline, none. Vermutlich wird der Kalender als div Element eingebunden, welches standardmäßig als block angezeigt wird.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Avatar von rd4eva
    rd4eva rd4eva ist offline Mitglied Brillant
    Registriert seit
    Feb 2003
    Beiträge
    756
    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.
    Sprint bedankt sich. 
    In order to understand recursion, one must first understand recursion.

  4. #4
    ripkens ripkens ist offline Mitglied Gold
    Registriert seit
    Jul 2005
    Ort
    NRW
    Beiträge
    161
    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)
     

  5. #5
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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>
     

  6. #6
    Sprint Sprint ist offline Mitglied Platin
    Registriert seit
    Apr 2004
    Ort
    Die heimliche Hauptstadt des Bieres
    Beiträge
    579
    Zitat Zitat von rd4eva Beitrag anzeigen
    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.
    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.
    HTML-Code:
    <body onload="document.getElementById('filterbox').style.display = 'none';">
    Danke für den Tip.
     
    Think Different.

  7. #7
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Sprint Beitrag anzeigen
    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
    Wie bereits gesagt, ist der Standardwert für die display Eigenschaft für Block-Level-Elemente wie div oder p "block".

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  8. #8
    Sprint Sprint ist offline Mitglied Platin
    Registriert seit
    Apr 2004
    Ort
    Die heimliche Hauptstadt des Bieres
    Beiträge
    579
    Zitat Zitat von deepthroat Beitrag anzeigen
    Wie bereits gesagt, ist der Standardwert für die display Eigenschaft für Block-Level-Elemente wie div oder p "block".

    Gruß
    Schon klar, aber warum funktioniert es dann, wenn das Kalender Script nicht eingebunden ist, ohne die Initialisierung? Das meinte ich damit.
     
    Think Different.

  9. #9
    Maik Tutorials.de Gastzugang
    Hi,
    Zitat Zitat von Sprint Beitrag anzeigen
    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.
    Wie kann ich diesen ersten Doppelklick vermeiden?
    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
     

  10. #10
    Sprint Sprint ist offline Mitglied Platin
    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.

  11. #11
    Back2toxic Back2toxic ist offline Mitglied Gold
    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
     

  12. #12
    Sprint Sprint ist offline Mitglied Platin
    Registriert seit
    Apr 2004
    Ort
    Die heimliche Hauptstadt des Bieres
    Beiträge
    579
    Zitat Zitat von Back2toxic Beitrag anzeigen
    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
    Spielt in dem Fall keine Rolle, da es eine interne Firmenseite ist. Aber danke, daß du dir da Gedanken gemacht hast.
     
    Think Different.

Ähnliche Themen

  1. Javascripte behindern sich - Alternative?
    Von tykee im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 04.09.10, 05:03
  2. Antworten: 4
    Letzter Beitrag: 24.07.10, 14:59
  3. Scripts "stören sich gegenseitig"
    Von Carrear im Forum Javascript & Ajax
    Antworten: 17
    Letzter Beitrag: 14.01.10, 01:44
  4. Antworten: 6
    Letzter Beitrag: 18.05.09, 07:24
  5. Apache2 & PHP <--> XAMPP (stören sich)
    Von versuch13 im Forum Hosting & Webserver
    Antworten: 4
    Letzter Beitrag: 27.06.06, 08:08