AnfängerProblem mit Variablen
Andi
- javascript
Hallo,
ich habe ein kleines xslt-sheet geschrieben, wo ich aus einen xml-file daten auslese und anzeige. die einzellnen blöcke möchte ich nun auch ein-/ausblenden. Habe mir dazu ein System mit Variablen ausgedacht, jedoch funktioniert es nicht, ich finde keinen Fehler mehr.
Könnt ihr mir da weiter helfen?
...
<script type="text/javascript">
<![CDATA[
function Weiter(versuch)
{
this.versuch = versuch;
if(document.getElementById("testbox").checked == true)
document.getElementById("versuch").style.display="none"
else
document.getElementById("versuch").style.display="block"
}
]]>
</script>
<xsl:for-each select="...">
<xsl:for-each select="...">
<xsl:for-each select="...">
<xsl:variable name="link_name" select="@Name"/>
<xsl:variable name="link_type" select="@Type"/>
<xsl:variable name="link_product" select="@Product"/>
<xsl:variable name="link_cpus" select="@CPUsPerNode"/>
<input type="checkbox" id="testbox" value="testbox" onclick="Weiter({$link_name}{$link_type}{$link_product}{$link_cpus})" />
<br/>
<div id="{$link_name}{$link_type}{$link_product}{$link_cpus}">
kleiner test zum Ein- / Ausblenden
</div>
...
Eigentlich sollten nun bei diesem kleinen Test der Text ein-/bzw. ausgeblendet werden. Aber das macht es nicht.
Andi
Hi,
<input type="checkbox" id="testbox" value="testbox" onclick="Weiter({$link_name}{$link_type}{$link_product}{$link_cpus})" />
Schau Dir den im Browser ankommenden HTML-Code an.
Dann wirst Du sehen, daß Du der Funktion Weiter nicht den String mit der id übergibst, sondern einen Variablennamen.
Mit Anführungszeichen wird es anders aussehen...
cu,
Andreas
Hallo,
wo müßten die Anführungszeichen denn hin?
<input type="checkbox" id="testbox" value="testbox" onclick="Weiter('{$link_name}{$link_type}{$link_product}{$link_cpus}')" />
So geht es leider auch nicht.
Andi
hi,
<input type="checkbox" id="testbox" value="testbox" onclick="Weiter('{$link_name}{$link_type}{$link_product}{$link_cpus}')" />
So geht es leider auch nicht.
was kommt dabei als quelltext heraus?
gruss,
wahsaga
<script type="text/javascript">
function Weiter(versuch)
{
this.versuch = versuch;
if(document.getElementById("testbox").checked == true)
document.getElementById("versuch").style.display="none"
else
document.getElementById("versuch").style.display="block"
}
</script>
<hr>
<hr>
<br>
<input type="checkbox" id="testbox" value="testbox" onclick="Weiter(4142)">
<br>
<div id="4142">
kleiner test zum Ein- / Ausblenden
</div>
Ein kleiner Auszug aus dem erzeugten Quelltext.
Oder müßte ich die Fkt. innerhalb der xsl:for-each anweisungen schreiben? Das sie jedesmal wieder neu erzeugt wird?
Andi
Quelltext-Nachbesserung:
Die ids müssen ja mit buchstaben beginnen, daran liegt es also auch nicht.
...
(ab4142)">
<br>
<div id="ab4142">
...
Andi
Hi,
Quelltext-Nachbesserung:
Die ids müssen ja mit buchstaben beginnen, daran liegt es also auch nicht.
aber jetzt fehlen auch wieder die ''
cu,
Andreas
<script type="text/javascript">
/* JavaScript-Kommentar: jetzt folgt ein kleines Script */
function Weiter(var versuch)
{
this.versuch = versuch;
if(document.getElementById("testbox").checked == true)
document.getElementById(versuch).style.display="none"
else
document.getElementById(versuch).style.display="block"
}
/* und damit ist das Script auch schon zu ende */
</script>
<hr>
<hr>
<br>
<input type="checkbox" id="testbox" value="testbox" onclick="Weiter('ab4232')">
<br>
<div id="ab4232">
kleiner test zum Ein- / Ausblenden
</div>
<br>
<input type="checkbox" id="testbox" value="testbox" onclick="Weiter('ab4233')">
<br>
<div id="ab4233">
kleiner test zum Ein- / Ausblenden
</div>
Die id und und die Varieble bei onclick wird allso richtig zusammengesetzt. Warum übernimmt die Funktion Weiter(versuch) aber nicht den String? Ich versteh das nicht.
Das einzige was mir noch auffällt, ist das die Ceckboxen die selbe id bekommen. Aber selbst wenn ich ihnen unterschiedliche verpasse, funktioniert es net.
Andi
Hi,
function Weiter(var versuch)
ein var zuviel.
<input type="checkbox" id="testbox" value="testbox" onclick="Weiter('ab4232')">
<input type="checkbox" id="testbox" value="testbox" onclick="Weiter('ab4233')">
id _MÜSSEN_ eindeutig sein.
cu,
Andreas
Jepp, danke für die Hilfe, hab es hinbekommen :o)
Viele Grüße
Andi
So schaut der Quelltext jetzt aus:
<script type="text/javascript">
<![CDATA[
function Weiter(versuch)
{
var boxnummeranfang = "checkbox"
var boxnummer = boxnummeranfang.concat(versuch);
if(document.getElementById(boxnummer).checked == true)
document.getElementById(versuch).style.display="none"
else
document.getElementById(versuch).style.display="block"
}
]]>
</script>
<xsl:for-each select="...">
<xsl:variable name="link_name" select="@Name"/>
<xsl:variable name="link_type" select="@Type"/>
<xsl:variable name="link_product" select="@Product"/>
<xsl:variable name="link_cpus" select="@CPUsPerNode"/>
<input type="checkbox" id="checkbox{$link_name}{$link_type}{$link_product}{$link_cpus}" value="testbox" onclick="Weiter('{$link_name}{$link_type}{$link_product}{$link_cpus}')">
hide
</input>
<br/>
<div id="{$link_name}{$link_type}{$link_product}{$link_cpus}">
kleiner test zum Ein- / Ausblenden
</div>
</xsl:for-each>
Gibt es eine Möglichkeit, das ich mit den erzeugten checkboxen nicht genau den div-block der id ausblende, sondern alle anderen erzeugten div-blöcke? Wüßte da leider keine Möglichkeit.
Andi
hi,
Gibt es eine Möglichkeit, das ich mit den erzeugten checkboxen nicht genau den div-block der id ausblende, sondern alle anderen erzeugten div-blöcke? Wüßte da leider keine Möglichkeit.
beschäftige dich mit dem konzept der schleifen (http://selfhtml.teamone.de/javascript/sprache/schleifen.htm), und lasse deine funktion alle betroffenen divs nacheinander ausblenden.
ggf. brauchst du eine zusätzliche bedingung, z.b. alle elemente vom typ div (getElementsByTagName), deren ID mit "blah" beginnt.
gruss,
wahsaga
Ok, das werde ich mal versuchen.
Ich geb dir bescheid, ob es funtkioniert hat oder nicht.
Viele Grüße
Andi
Gibt es die Möglichkeit, im JavaScript-Code einen Select auszuführen, wie ich es bei den Variablen gemacht hab? So könnt ich dann über zum Beispiel eine for-Schleife die ganzen Fakten aus dem xml - file per Selects in meinem JavaScript in Variablen schreiben.
Eine andere Möglichkeit fällt mir hier nicht mehr ein.
Andi
hi,
Gibt es die Möglichkeit, im JavaScript-Code einen Select auszuführen, wie ich es bei den Variablen gemacht hab?
einen select - auf was?
das clientseitiges javascript keinerlei zugriff auf serverseitige datenquellen wie z.b. eine datenbank hat, sollte bekannt sein.
gruss,
wahsaga
Aber wie sollte das denn sonst gehen? Ich muß doch irgendwie javascript-seitig die arrays zusammenstellen, das heisst so iwe ich zum Beispiel die ids zusammenstell, genau so müßt ich auch arrays im javascript-teil füllen. Wüßte sonst keinen Weg.
Ich glaub langsam das ist ein unlösbares Problem, was ich da hab.
Andi
hi,
Aber wie sollte das denn sonst gehen?
wie soll _was_ gehen? beschreibe doch erst einmal mal etwas detailierter, was du eigentlich vorhast.
Ich muß doch irgendwie javascript-seitig die arrays zusammenstellen, das heisst so iwe ich zum Beispiel die ids zusammenstell, genau so müßt ich auch arrays im javascript-teil füllen.
auch javascript-arrays lassen sich durch serverseitige scriptsprachen "erzeugen".
gruss,
wahsaga
Hallo,
das ist ein Auszug aus meinem Sheet:
<script type="text/javascript">
<![CDATA[
function Weiter(versuch)
{
var boxnummeranfang = "checkbox"
var boxnummer = boxnummeranfang.concat(versuch);
if(document.getElementById(boxnummer).checked == true)
document.getElementById(versuch).style.display="none"
else
document.getElementById(versuch).style.display="block"
}
]]>
</script>
<xsl:for-each select="...">
<xsl:for-each select="...">
<xsl:for-each select="...">
<xsl:variable name="link_name" select="@Name"/>
<xsl:variable name="link_type" select="@Type"/>
<xsl:variable name="link_product" select="@Product"/>
<xsl:variable name="link_cpus" select="@CPUsPerNode"/>
<input type="checkbox" id="checkbox{$link_name}{$link_type}{$link_product}{$link_cpus}" value="testbox" onclick="Weiter('{$link_name}{$link_type}{$link_product}{$link_cpus}')">
hide
</input>
<br/>
<div id="{$link_name}{$link_type}{$link_product}{$link_cpus}">
kleiner test zum Ein- / Ausblenden
</div>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
Jetzt möchte ich über die Checkbox einer solchen Konstellation nicht mehr den zugehörigen Div-Bereich ausblenden, sondern den Div-Bereich aller anderen Checkboxen, verstehst du was ich mein? Über die Checkbox alle anderen Bereiche, nur nicht den eigenen ausblenden.
Und dazu müßte ich irgendwie Name, Product, Type und CpusPerNode in mein Script einlesen. Oder gibt es da nur noch den umständlichen Weg, assoziative Arrays zu definieren?
Gruß
Andi
hi,
Jetzt möchte ich über die Checkbox einer solchen Konstellation nicht mehr den zugehörigen Div-Bereich ausblenden, sondern den Div-Bereich aller anderen Checkboxen
_alle_ divs in der seite bekommst du mit einer schleife über das array, welches document.getElementsByTagName("div") dir liefert.
darin dann zu entscheiden, welche du ausblenden möchtest und welche nicht, wäre dann dynamisch zu entscheiden. (z.b. anhand einer übergebenen ID für das div, welches _nicht_ ausgeblendet werden soll.)
gruss,
wahsaga
Hallo,
jepp, so funktioniert es. War zwar etwas umständlich, aber es funktioniert.
Vielen Dank für die Tips!
Andi