Zur Navigation

Aufklappbares Menü mit Untermenü per Variablen [2]

11 Jörg Kruse

1. tempvar wird also nicht jedesmal neu auf 0 gesetzt?

Nur am Anfang der Laufzeit dieses Scriptes.

2. Das Problem ist eher eine Frage der Syntax. Wann wird das Apostroph genommen, wann die Anführungszeichen

Im Prinzip ist das egal, ob ' oder "; da das onclick Attribut hier allerdings schon " verwendet, bleibt für den Funktionsparamater nur das '

<a href="#" onclick="Un_Fold('_EPISODE_SEASON_');return false;">

und bleibt das bei einer Textersetzung auch so bestehen. _EPISODE_SEASON_ ist ja nicht der Wert sondern quasi nur ein Parameter. Und ob die Syntax bei Strings bzw. Integerwerten identisch ist...

Wofür soll _EPISODE_SEASON_ denn ein Paramater sein - für JavaScript oder für eine serverseitige Sprache, die diesen ersetzen soll? Befindet sich dieser Parameter im HTML-Dokument, welches ausgegeben wird? Wenn nein, überprüfe die HTML-Ausgabe, dann siehst du, ob es richtig ersetzt wird.

Die ID, die an Un_Fold() übergeben wird, sollte ein String sein und entsprechend in " oder ' eingebettet sein.

03.08.2009 15:49 | geändert: 03.08.2009 15:50

12 JDommi

<script type="text/javascript">
  var tempvar = 0;
  function swing(x) {
  if (tempvar == x) {
   exit;
  } else {
   tempvar = x;
  }
  if(document.getElementById(x).style.display == "block") {
   document.getElementById(x).style.display = "none";
  } else {
   document.getElementById(x).style.display = "block";
  }}
</script>
       <a href="#" onclick="swing('under1');return false;"><img border="0" src="MyCollectionCard/FrecciaVerde2.bmp" width="16" height="16">&nbsp;<font size=2><b>EPISODES:</b></font></a>
       <div style="display:none;" id="under1">
				
        		  <!--END_HEAD-->
        		
				
			<a href="#" onclick="swing('_EPISODE_SEASON_');return false;"><img border="0" src="MyCollectionCard/FrecciaVerde2.bmp" width="16" height="16">&nbsp;<font size=2><b>Season: _EPISODE_SEASON_</b></font></a>
            <div style="display:none;" id="_EPISODE_SEASON_">
			<b><font size="1"><img border="0" src="MyCollectionCard/FrecciaVerde.bmp" width="16" height="16">&nbsp;</font></b>
			<font size="1">(_EPISODE_SEASON_-_EPISODE_NUMBER_)<a href="" onclick="window.external.COLLECTION_EPISODE('_EPISODE_ID_');return false;"><b>_EPISODE_TITLE_  </b></a><br> </font> 
			</div>
			 <!--END_EPISODES-->

			</div>

Jetzt sieht das Ergebnis so aus: [url=http://mitglied.lycos.de/jkdommi/Unbenannt-1.jpg]
Wie bekomme ich es hin, daß ALLE Episoden einer einzelnen Staffel angezeigt werden?
Ach ja, das onclick-Ereignis wird mit obigem Code nur ausgeführt, wenn vorher eine andere Staffel angeklickt war. Auf- und zuklappen der selben Staffel ist also nicht direkt hintereinander machbar.

Sorry, wenn ich nerve, Jörg, aber dieser Code macht mich langsam schon vollkommen kirre!
Hab auch schon mit innerhtml versucht den Code zu ergänzen, hatte allerdings nur Scriptfehler weil der zu ergänzende Code mal wieder ' und " enthält :(
<SCRIPT LANGUAGE="JavaScript">
  var tempvar = 0;
  function AddStartCode(x) {
  if (tempvar == x) {
   exit;
  } else {
   tempvar = x;
  document.getElementById(x).innerHTML = '            <a href="#" onclick="swing('_EPISODE_SEASON_');return false;"><img border="0" src="MyCollectionCard/FrecciaVerde2.bmp" width="16" height="16">&nbsp;<font size=2><b>Season: _EPISODE_SEASON_</b></font></a>
            <div style="display:none;" id="_EPISODE_SEASON_">';
  }}
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
  var tempvar = 0;
  function AddEndCode(x) {
  if (tempvar == x) {
   exit;
  } else {
   tempvar = x;
  document.getElementById(x).innerHTML = '            </div>';
  }}
</SCRIPT>
       <a href="#" onclick="swing('under1');return false;"><img border="0" src="MyCollectionCard/FrecciaVerde2.bmp" width="16" height="16">&nbsp;<font size=2><b>EPISODES:</b></font></a>
       <div style="display:none;" id="under1">
				
        		  <!--END_HEAD-->
        		
            <script type="text/javascript">
              AddStartCode('_EPISODE_SEASON_');
            </script>
			<b><font size="1"><img border="0" src="MyCollectionCard/FrecciaVerde.bmp" width="16" height="16">&nbsp;</font></b>
			<font size="1">(_EPISODE_SEASON_-_EPISODE_NUMBER_)<a href="" onclick="window.external.COLLECTION_EPISODE('_EPISODE_ID_');return false;"><b>_EPISODE_TITLE_  </b></a><br> </font> 
            <script type="text/javascript">
              AddEndCode('_EPISODE_SEASON_');
            </script>
			 <!--END_EPISODES-->
			</div>

03.08.2009 17:19 | geändert: 03.08.2009 17:56

13 Jörg Kruse

Wie bekomme ich es hin, daß ALLE Episoden einer einzelnen Staffel angezeigt werden?

Dein Code-Beispiel enthält nur eine Episode, wenn ich dieses nicht fehlinterpretiere. Aufgeklappt wird der Container mit der ID "under1". Wenn du alle Episoden in diesen Container packst, sollten beim Aufklappen auch alle angezeigt werden?

Ach ja, das onclick-Ereignis wird mit obigem Code nur ausgeführt, wenn vorher eine andere Staffel angeklickt war. Auf- und zuklappen der selben Staffel ist also nicht direkt hintereinander machbar.

Das war der Grund, dass du tempvar auswerten wolltest? d.h. die Stafel SOLL nicht direkt ein- und wieder ausgeklappt werden?

Hab auch schon mit innerhtml versucht den Code zu ergänzen, hatte allerdings nur Scriptfehler weil der zu ergänzende Code mal wieder ' und " enthält :(

Du verwendest ' für document.getElementById(x).innerHTML und für das Argument von swing(), welches sich innerhalb von document.getElementById(x).innerHTML befindet. In dem Fall musst du die ' in swing() maskieren

document.getElementById(x).innerHTML = '            <a href="#" onclick="swing(\'_EPISODE_SEASON_\');return false;"><img border="0" src="MyCollectionCard/FrecciaVerde2.bmp" width="16" height="16">&nbsp;<font size=2><b>Season: _EPISODE_SEASON_</b></font></a>
            <div style="display:none;" id="_EPISODE_SEASON_">';

03.08.2009 18:10 | geändert: 03.08.2009 18:10

14 JDommi

Dein Code-Beispiel enthält nur eine Episode, wenn ich dieses nicht fehlinterpretiere. Aufgeklappt wird der Container mit der ID "under1". Wenn du alle Episoden in diesen Container packst, sollten beim Aufklappen auch alle angezeigt werden?

Alles zwischen <!--END_HEAD--> und <!--END_EPISODES--> wird automatisch für jede Episode wiederholt - vom Programm in dem der HTML-Code angezeigt wird.

Das war der Grund, dass du vartemp auswerten wolltest? d.h. die Stafel SOLL nicht direkt ein- und wieder ausgeklappt werden?

Doch, nur soll sich das Auf- und Zuklappen auf komplette Staffeln beziehen -> Ich klappe Staffel 2 auf und es werden alle Episoden dieser Staffel angezeigt.

Du verwendest ' für document.getElementById(x).innerHTML und für das Argument von swing(), welches sich innerhalb von document.getElementById(x).innerHTML befindet. In dem Fall musst du die ' in swing() maskieren

Ja, nur wusste ich bisher nicht wie... Wie man merkt, bin ich nicht grade bewandert in Javascript.

03.08.2009 18:21

15 Jörg Kruse

Alles zwischen <!--END_HEAD--> und <!--END_EPISODES--> wird automatisch für jede Episode wiederholt - vom Programm in dem der HTML-Code angezeigt wird.

Dann liegt deinem Beispielcode zufolge auch alles in "under1" und sollte auch komplett aufgeklappt werden.

Doch, nur soll sich das Auf- und Zuklappen auf komplette Staffeln beziehen -> Ich klappe Staffel 2 auf und es werden alle Episoden dieser Staffel angezeigt.

Also so wie in dem Code in Beitrag 3? Wenn ich dort auf "Season1" klicke, werden alle Episoden angezeigt. Also scheint es doch so zu funktionieren?

03.08.2009 18:34

16 JDommi

Es klappt eben nicht!

<script type="text/javascript">
  if (document.getElementById(x).style.display == "block") {
   document.getElementById(x).style.display = "none";
  } else {
   document.getElementById(x).style.display = "block";
  }
</script>
       <a href="#" onclick="swing('under1');return false;"><img border="0" src="MyCollectionCard/FrecciaVerde2.bmp" width="16" height="16">&nbsp;<font size=2><b>EPISODES:</b></font></a>
       <div style="display:none;" id="under1">
				
        		  <!--END_HEAD-->
        		
			<b><font size="1"><img border="0" src="MyCollectionCard/FrecciaVerde.bmp" width="16" height="16">&nbsp;</font></b>
			<font size="1">(_EPISODE_SEASON_-_EPISODE_NUMBER_)<a href="" onclick="window.external.COLLECTION_EPISODE('_EPISODE_ID_');return false;"><b>_EPISODE_TITLE_  </b></a><br> </font> 
			 <!--END_EPISODES-->
			</div>

Dies ist der Original-Code.

Damit kann ich alle Episoden der kompletten Serie ein-/ausblenden. Was mir noch fehlt, ist der <div>-Bereich für die einzelnen Staffeln.
Das Template für den Episodenbereich beinhaltet aber nur EINMAL den Code für jede Episode - dieser wird automatisch einfach nur wiederholt für jede weitere Folge.
Aus diesem Grunde muß ich den <div>-Bereich scriptmäßig erstellen, so daß er die einzelnen Staffeln aufklappbar unterteilt.

03.08.2009 18:57 | geändert: 03.08.2009 18:58

17 Jörg Kruse

Was mir noch fehlt, ist der <div>-Bereich für die einzelnen Staffeln.

Kannst du das nicht einfach so machen:

 <!--END_HEAD-->
<div id="_EPISODE_ID_'">	
			
<!-- etc. -->

</div>
<font face="Arial">&#9660;</font><a href="#" onclick="Un_Fold('_EPISODE_ID_');return false;">_EPISODE_SEASON_-_EPISODE_NUMBER_</a>
			 <!--END_EPISODES-->

03.08.2009 19:30 | geändert: 03.08.2009 19:30

18 JDommi

Schön wär's...
Ich schätze mal, die Version mit
<SCRIPT LANGUAGE="JavaScript">
  var tempvar = 0;
  function AddEndCode(x) {
  if (tempvar == x) {
   exit;
  } else {
   tempvar = x;
  document.getElementById(x).innerHTML = '            </div>';
  }}
</SCRIPT>
<script type="text/javascript">
  if (document.getElementById(x).style.display == "block") {
   document.getElementById(x).style.display = "none";
  } else {
   document.getElementById(x).style.display = "block";
  }
</script>
            <script type="text/javascript">
              AddStartCode(_EPISODE_SEASON_);
            </script>
			<b><font size="1"><img border="0" src="MyCollectionCard/FrecciaVerde.bmp" width="16" height="16">&nbsp;</font></b>
			<font size="1">(_EPISODE_SEASON_-_EPISODE_NUMBER_)<a href="" onclick="window.external.COLLECTION_EPISODE('_EPISODE_ID_');return false;"><b>_EPISODE_TITLE_  </b></a><br> </font> 
            <script type="text/javascript">
              AddEndCode(_EPISODE_SEASON_);
            </script>
			 <!--END_EPISODES-->
wird wohl die einzig brauchbare Lösung sein. Leider funktioniert da noch was nicht... der Code wird scheinbar nicht oder falsch eingefügt, denn ich kann gar nicht mehr klappen.

03.08.2009 20:26

19 Jörg Kruse

Ja, dann hilf dir mal selber. Ich klink mich hier aus.

03.08.2009 21:13

20 JDommi

Ok, trotzdem Danke für deine Hilfe.

03.08.2009 21:15