"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

<td> ausblenden mit JS

flocky 07.09.2005 - 05:30 1807 9
Posts

flocky

sn0wner (analphabet)
Avatar
Registered: May 2002
Location: life-compiler
Posts: 1663
ich hab eine seite auf welcher der content dynamisch erstellt wird. es werden einzelne entries formatiert ausgegeben, jeder entry mit zugehöriger statistik wird in einem eigenen table ausgegeben. die statistik befindet sich jeweils in einem eigenen <td> und dieses möchte ich per JS ausblenden, das geht mal folgendermaßen:
Code:
<script language="javascript">
function toggle(name)
{
visibility = (name.style.display == 'none') ? '' : 'none';
name.style.display = visibility;
}
</script>
wobei 'name' als id=name im <td> festgelegt ist. soweit so gut, jetz hab ich halt an haufen <td>s den ich ausblenden will und wenn ich jedem die selbe id geb dann geht schon mal gar nix. jetz create ich halt über php fortlaufende ids (stats0, stats1, stats2,...) und hab mir gedacht ich verarbeite das ganze mit einer for-schleife ($num_rows ist die anzahl der einträge) =>
Code:
<script language="javascript">
function toggle(name)
{
for(i=0;i<={$num_rows};i++)
{
var visi = stats + i;
visibility = (visi.style.display == 'none') ? '' : 'none';
visi.style.display = visibility;
}
}
</script>
die zeile var visi = stats + i; macht aber probleme, der syntax müsste eigentlich passen aber es geht trotzdem was ned und wenn ich 'stats' + i; dann passt zwar der inhalt der variable, is aber für den zugriff auf das element anscheinend unbrauchbar.

lange rede kurzer sinn, was passt da bei JS ned? ich hab nur ausführlich erklärt was ich machen möchte falls jemand vielleicht noch andere lösungsansätze hat.

tia
Bearbeitet von flocky am 07.09.2005, 21:56

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
du willst das:

var id = 'stats' + i
document.getElementById(id).style....

flocky

sn0wner (analphabet)
Avatar
Registered: May 2002
Location: life-compiler
Posts: 1663
ich hab jetz

Code:
<script language=\"javascript\">
function togglevis()
{
for(i=0;i<={$num_rows};i++)
{
var visi = 'stats' + i;
visibility = (document.getElementByID('visi').style.display == 'none') ? '' : 'none';
document.getElementByID('visi').style.display = visibility;
}
}
</script>

geht leider immer noch ned. anscheinend dürft ab der 7. zeile ein fehler sein weil er da zum interpreten aufhört.
btw: habs bei getElementByID('visi') mit/ohne anführungszeichen und jeweils mit runden und eckigen klammern probiert.

cduke

Big d00d
Registered: Nov 2001
Location: 1230 Wien
Posts: 253
Du willst doch nicht das Element mit der id "visi" bekommen, sondern das mit der id, die in der variable "visi" gespeichert ist. Der Aufruf muss also

document.getElementByID(visi)

lauten.

greetz cduke

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
ahm... ich hab kein Schimmer was du da anstellen willst mit der ?: abfrage... wenns "none" is, machst du ein "" daraus und sonst ein "none" ? Das is sehr konfus in meinen Augen. Willst du die Anzeige jetzt "Togglen" (deine Funktion heisst zumindest so) oder wirklich nur alles ausblenden?

ein anderer Punkt, es heisst "getElementById" und NICHT "getElementByID" javascript is case-sensitive, und deswegen kann das nicht gehen.

du definierst innerhalb der Schleife jedes Mal die Variable "visi" neu das macht man nicht.
Bearbeitet von watchout am 07.09.2005, 14:20

flocky

sn0wner (analphabet)
Avatar
Registered: May 2002
Location: life-compiler
Posts: 1663
² duke

hab ich ja auch probiert, geht ja nicht.
Zitat von watchout
ahm... ich hab kein Schimmer was du da anstellen willst mit der ?: abfrage... wenns "none" is, machst du ein "" daraus und sonst ein "none" ? Das is sehr konfus in meinen Augen. Willst du die Anzeige jetzt "Togglen" (deine Funktion heisst zumindest so) oder wirklich nur alles ausblenden?

ein anderer Punkt, es heisst "getElementById" und NICHT "getElementByID" javascript is case-sensitive, und deswegen kann das nicht gehen.

du definierst innerhalb der Schleife jedes Mal die Variable "visi" neu das macht man nicht.
prinzipiell funktionierts mit den werten ja so, wenns auf "" steht dann ist es sichtbar bzw. wird vom browser mit dem defaultwert interpretiert, wenns auf "none" is ises nicht sichtbar.

der crap funzt jetz endlich =>
Code:
<script language=\"javascript\">
var visi = 0;
function togglevis()
{
for(i=0;i<={$num_rows};i++)
{
visi = 'stats' + i;
visibility = (document.getElementById(visi).style.display == 'none') ? '' : 'none';
document.getElementById(visi).style.display = visibility;
}
}
</script>

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Zitat von watchout
du definierst innerhalb der Schleife jedes Mal die Variable "visi" neu das macht man nicht.

doch, das macht man, wenn man die Variable nur innerhalb braucht.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von that
doch, das macht man, wenn man die Variable nur innerhalb braucht.
Ahm, für eine solche Schleife machst du lieber
allocate, set, free, allocate, set, free.... , free

statt
allocate, set, set, ...., free
?

Noch dazu definieren soweit ich bis jetzt bemerkt habe nur function-blocks einen eigenen "variable-scope"... ok vielleicht hab ich das jetzt auch mit php verwechselt - obige performance-darstellung trifft trotzdem zu. Wäre es nicht sicher dass der Variable immer ein Wert zugewiesen würde, dann is ok wenn ich jedes Mal eine neue lokale Variable definiere.

Ok, das dazu. Und jetzt... das hab ich eigentlich alles nicht gemeint :D
Ich meinte eigentlich dass man das auch gleich an den 2 stellen (von denen man eigentlich eh nur eine braucht...) das "visi"+i gleich direkt in den function-call hätte reinschreiben können. Zumindest denke ich dass ich das gmeint habe, weil das mir jetzt so auffällt...
argl ich pfeiff auf JS ich geh wieder zu meinem sicken LUA :)

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Zitat von watchout
Ahm, für eine solche Schleife machst du lieber
allocate, set, free, allocate, set, free.... , free

statt
allocate, set, set, ...., free
?

Nein, ich deklariere Variablen einfach dort wo sie gebraucht werden. Wovon sprichst du überhaupt? Performance? Ist in diesem Fall wohl vernachlässigbar, außerdem sind beide Varianten gleich schnell.

Zitat von watchout
Ich meinte eigentlich dass man das auch gleich an den 2 stellen (von denen man eigentlich eh nur eine braucht...) das "visi"+i gleich direkt in den function-call hätte reinschreiben können.

Mit Variable ists aber schöner, weil damit das Zusammensetzen des Namens an einer Stelle konzentriert ist.

flocky

sn0wner (analphabet)
Avatar
Registered: May 2002
Location: life-compiler
Posts: 1663
Zitat von watchout
Ich meinte eigentlich dass man das auch gleich an den 2 stellen (von denen man eigentlich eh nur eine braucht...) das "visi"+i gleich direkt in den function-call hätte reinschreiben können. Zumindest denke ich dass ich das gmeint habe, weil das mir jetzt so auffällt...
argl ich pfeiff auf JS ich geh wieder zu meinem sicken LUA :)
wie hätt ich das in den function call reinschreiben sollen bzw. was hätts für einen sinn gehabt? wär im code halt bissi weiter oben gstanden...

und ja, sonst find ich JS ja auch grausig, ich finds nur praktisch dass es instant ohne reload (client script halt) funzt und dass man recht einfach auf die ganzen html-elemente zugreifen kann.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz