mehrere Klapptexte

Devil/hes

Mitglied
Morgen allerseits :)

Nun da ich gestern eins meiner Probleme lösen konnte steh ich doch glatt wieder vor einem zweiten ;).

Ich habe ein Newsscript welches beliebig viele Klapptexte enhalten kann.
Nun hab ich das problem das ich bei z.B 2 Klapptexten die ich nacheinander anklicke ich bei dem zweiten Klapptext 2 mal drücken muss bevor sich der Klapptext öffnet...ich versteh auch die Logik hinter meinem Fehler ( Ich habe nur 1nen Zähler für alle Klapptexte ) Bin aber irgendwie nicht in der Lage da ne Lösung für zu finden.

Hoffe ihr könnt mir helfen...derweil hier der code von Javascript

Code:
<script language="javascript">
		var Zaehler = 0;
function Einblenden(tabelle)
     {	
	 	 if (Zaehler % 2 ==0)
		 {
         document.getElementById(tabelle).style.display = "block";
		 }
		else
		 {
		 document.getElementById(tabelle).style.display = "none";
		 }		
		Zaehler++; 
     }
</script>

und der Klapptext

PHP:
<?
	$klapper=mysql_query("SELECT * FROM news_klapper WHERE news_klapper_news_id='$daten[news_id]'");
	while($klappertext = mysql_fetch_array($klapper))
	{
	
	 ?>
	<table width="494" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td width="5"></td>
        <td width="431">
<img src="images/expand.gif" width="14" height="11" />
<a onclick="Einblenden(<? echo $klappertext["news_klapper_id"]; ?>)"><? echo $klappertext["news_klapper_titel"]; ?></a></td>
      </tr>
    </table>
	<table width="494" id="<? echo $klappertext["news_klapper_id"]; ?>" border="0" cellpadding="0" cellspacing="0" style="display:none;">
      <tr>
        <td width="5"></td>
        <td width="431"><? echo $klappertext["news_klapper_text"]; ?></td>
      </tr>
    </table>
	<? } ?>

Danke schonmal im vorraus für jegliche Hilfe :)
 
Reicht da nicht "Einblenden(this);" ? Sorry, bin nicht so der JavaScript-Guru, aber das hat bei mir eigentlich stets gut funktioniert bei solchen Sachen.
 
Du bräuchstest einen Zähler für jede Tabelle und nicht einen globalen Zähler. So z.B:
<script...>
function Einblenden(tabelle)
{
if( !this.Zaehler ) this.Zaehler = 0;
if (this.Zaehler % 2 ==0)
{
document.getElementById(tabelle).style.display = "block";
}
else
{
document.getElementById(tabelle).style.display = "none";
}
this.Zaehler++;
}
</script>
 
Reicht da nicht "Einblenden(this);" ? Sorry, bin nicht so der JavaScript-Guru, aber das hat bei mir eigentlich stets gut funktioniert bei solchen Sachen.
Nein, reicht nicht, weil man mit "Einblenden(this)" und einem entsprechend umgeschriebenen Script wahrscheinlich nur den Link ausblenden würde.

Wie auch immer, zu deinem Problem: Wozu überhaupt so einen Zähler? Du willst eine Funktion, die das Ding einblendet, wenn es ausgeblendet ist und es ausblendet, wenn es bereits eingeblendet ist. Da drängt sich doch eine if-else-Konstuktion auf, die prüft ob das Ding eingblendet ist. Dein Zähler ist ein dummer Umweg und ein Zähler für jedes Element ist einfach nur Overkill.
Keep it simple guys!

Javascript:
function Einblenden(tabelle) {
    var obj = window.document.getElementById(tabelle);
    if( obj.style.display == 'none' )
        obj.style.display = 'block';
    else
        obj.style.display = 'none';
 }

Mit dem ternären Operator geht das ganze dann noch kürzer. Statt der if-esle-Anweisung reicht dann
"obj.style.display = obj.style.display == 'none' ? 'block' : 'none';"

P.S.
Das "langugage"-Attribut für scripte ist depreciated, d.h. unerwünscht. Das kommt daher, dass es sonst Verwirrung mit der Dokumentsprache und Ähnlichem gibt. Benutze statt dessen type="text/javascript"
 
Zuletzt bearbeitet:
Vielen Dank con-f-use

Das war genau das was ich gebraucht habe :)

Aber mann jemanden nicht gleich aus Dumm bezeichnen oder den Weg den er einschlägt ;) grade wenn man nicht soviel ahnung von der materie hat.
 
Zuletzt bearbeitet:
Code:
<script language="javascript">

function elm(e) {
  if(typeof(e)!='string') return null;
  if(document.getElementById) return document.getElementById(e) :  return document.all[e];
  if(document.layers) return document.layers[e] :  return null;
 }


		
function Einblenden(tabelle){
var e=elm(tabelle)
if (e)  {
           if ( e.style.display == "block"){
		 e.style.display = "none";
		 } else {
	         e.style.display = "block";
           }
      }		
}

Wie wär es damit ?
Crossbrowser narrensicher und viel simpler ;)
 
Zuletzt bearbeitet:
:offtopic:

Ist nicht Crossbrowser - der alte Netscape kennt weder document.all noch getElementById.

Ich behaupte ja, dass man auf solche Krücken, wie den alten IE und den alten NS gar keine Rücksicht mehr nehmen muss. Die sind definitiv nicht mehr in Verwendung (lt. google < 0,01% der User). Außerdem setzten sich gute Standards, wie das DOM nur durch, wenn man die Leute halbwegs zu ihrem Glück zwingt.
Dank dieser Crossbrowser-Manie hat sich z.B. auch sowas wie die WYSIWYG-Methoden noch nicht durchgesetzt und wir editieren immernoch größtenteils mit Brocken wie BB-Codes und Simlie-Codes, sind also quasi was das WWW angeht immernoch bei DOS-Techniken.

:offtopic:
 
Zuletzt bearbeitet:
Der verehrte Kollege hat scheinbar in seinem jugendlich missionarischen Eifer einige Dinge übersehen.

1. z.B. die "If then" Abfragen ob der Browser dieses Objekt überhaupt besitzt.
Wenn ja dann liefert er das Objekt zurück.


2. Es geht nicht darum den User zu gängeln frei nach dem Motto "Du *A* installier nun gefälligst Browser xyz sondern in seiner Wissbegier zufriedenzustellen.
Sprich der Job besteht darin Informationen auszuliefern nicht selbiges zu verhindern.

3. Kein Mensch weis was der Fragesteller für einen Browser installiert hat.
Der will sein Ausklappmenü zum laufen bringen und wundert sich warum das nicht geht.
Wenn der nun ausgerechnet einen IE6 am Start hat nutzt dem es überhaupt nichts das document all kein Standart ist - der ist nur frustriert weil der hat nichts anderes.

Vielleicht liegt es ja an meinem biblischen Alter mit der einhergehenden verkalkung das ich Dinge anders sehe und löse als manch junger Heißspon ;)
(Alzheimer ned zu vergesse :P )

Munter bleiben :D
 
In diesem Falle wäre die Frage:
  • wieviele Menschen nutzen noch IE4 oder NN4
  • Wieviele Menschen haben JS im Browser deaktiviert
Beim Ersteren möchte ich behaupten, sehr wenig, und dies sind eh nur "Webdesigner", welche herumtesten.

Bei 2. Dürften es ungleich mehr sein, und wenn du auch dieser Meinung bist, fehlt mir der Ansatz, auch diese Menschen zufriedenzustellen.


Übrigens..... deine NN-Variante dürfte ohnehin nicht funktionieren, da DHTML dort etwas anders funktioniert, wenn ich mich nicht flasch erinnere.

Ebenso werden User von Opera 5+6 ausgeschlossen, da dort das Ändern der display-Eigenschaft keinen Effekt zeigt...ich finde das skandalös :-)
 

Neue Beiträge

Zurück