[JS] Script arbeitet erst nach 2. Klick

kbot

warm draußen,oder?
ID: 50740
L
20 April 2006
4.203
143
Moin,

ich hab nen JS welches nen Text unsichtbar machen soll.
Man klickt nen Link, welcher dann sich selbst und den vorstehenden Text auf 'hidden' setzen soll bzw. das Div, in dem sich beide befinden.

Leider funktioniert es erst, nachdem man zweimal drauf geklickt hat und ich hab keine Ahnung wieso ...

die Funktion:
PHP:
<script type="text/javascript">
function getdivstyle (id) {
  if      (parent.text.document.layers)         return parent.text.document.layers(id);
  else if (parent.text.document.all)            return parent.text.document.all(id).style;
  else  return parent.text.document.getElementById(id).style;
}

function ShowHide(id) {
    if (getdivstyle(id).visibility == 'visible'){
    getdivstyle(id).visibility = 'hidden';
	getdivstyle(id).display = 'none';
	}
    else {
    getdivstyle(id).visibility = 'visible';
	getdivstyle(id).display = 'block';
    }
}
</script>
das CSS:
PHP:
<style type="text/css">
#reload {
	display:	block;
	visibility:	visible;
	}
a.x 	{
	text-decoration: none;
	}
</style>
der Text:
PHP:
<div id="reload">
<a href="javascript:parent.text.location.reload()">Seite wird nicht angezeigt?</a><span> </span>
<a class="x" href="javascript:ShowHide('reload')" alt="Hinweis entfernen" title="Hinweis entfernen"><span style="text-decoration: none;">(X)</span></a>
</div>


Ich hoffe, dass jemand den Fehler sieht, denn ich hab Null Ahnung, woran es liegt :(


MfG kbot
 
Zuletzt bearbeitet:
Wenn du bei deiner If-Abfrage abfragst, welche Eigenschaft das div aktuell hat, dann musst du schaun, dass die urpsürngliche eigenschaft auch im CSS gesetzt ist. Wenn du nämlich visibility: visible; noch nicht gesetzt hast, liest er das aus und die zeile
PHP:
if (getdivstyle(id).visibility == 'visible') {
wird false sein, auch wenns aktuell sichtbar ist.
Also soltle es reichen, dem entsprechenden div noch das visibility-Element im Style-Attribut zu geben. Alternative ist nach ungleichheit überprüfen bei der if-abfrage.
 
also visible ist schon gesetzt, siehe oben im CSS unter #reload

das mit der Ungleichheit probierte ich auch schon, hat auch nix gebracht :(
 
Wenn ich mir das genau anschaue, wozu hast du in deiner Funktion getdivstyle() drei verschiedene Techniken, um an ein Objekt zu kommen? Sollte getElementById() nicht völlig ausreichen, wenn du sowieso die id des elementes übergibst?
 
das bekam ich mal von einem Freund, er sagte dass es zuverlässiger arbeiten würde, als das, was ich vorher hatte und es läuft auch schon ziemlich lange auf ner anderen Seite problemlos...

hier funktioniert es eigentlich auch so, wie es soll, aber halt irgendwie erst nach dem 2. Klick...

Edit:
PHP:
function getdivstyle (id) { return parent.text.document.getElementById(id).style; }
damit gehts auch erst nachm 2. Klick
 
Zuletzt bearbeitet:
Okey, nächste Option: Google mal nach dem Javascript Objekt currentStyle. Hab gard was gefunden, demzufolge ist ds wohl nur für den IE, aber vielleicht hilft es ja trotzdem.. Bald weiß ich btw. auch nicht mehr weiter ;)

Und bezüglich der beiden anderen Befehle: Selbst wenn es läuft, kommentiert die doch einfach mal aus und schau, obs was ändert.
 
also visible ist schon gesetzt, siehe oben im CSS unter #reload

das mit der Ungleichheit probierte ich auch schon, hat auch nix gebracht :(

Nein, visible ist nicht gesetzt, da zwischen

element.style
und
#reload

ein Unterschied besteht.

Sprich beim ersten Aufruf wird element.style gesetzt, beim zweiten #reload.

btw: Wieso implementierst du eine Möglichkeit zum Sichtbarmachen dieses Elements, wenn du sie vielleicht (noch) gar nicht benötigst (Ich habe nichts gefunden, wo dies der Fall ist).
 
also visible ist schon gesetzt, siehe oben im CSS unter #reload

das mit der Ungleichheit probierte ich auch schon, hat auch nix gebracht :(

Es muss aber mit style="" im HTML-Tag verankert sein. Ansonsten ist das für JS noch nicht gesetzt. Alternativ kannst du auch dein JS anpassen.
HTML:
function ShowHide(id) {
    if (getdivstyle(id).visibility == 'visible' || getdivstyle(id).visibility == ''){
    getdivstyle(id).visibility = 'hidden';
    getdivstyle(id).display = 'none';
    }
    else {
    getdivstyle(id).visibility = 'visible';
    getdivstyle(id).display = 'block';
    }
}
 
Nein, visible ist nicht gesetzt, da zwischen

element.style
und
#reload

ein Unterschied besteht.

Sprich beim ersten Aufruf wird element.style gesetzt, beim zweiten #reload.

btw: Wieso implementierst du eine Möglichkeit zum Sichtbarmachen dieses Elements, wenn du sie vielleicht (noch) gar nicht benötigst (Ich habe nichts gefunden, wo dies der Fall ist).
ich habe das Skript auch auf ner anderen Seite laufen, wo beide Funktionen genutzt werden und ich habs einfach rüberkopiert, da ich dachte, dass es auch hier problemlos läuft...

Es muss aber mit style="" im HTML-Tag verankert sein. Ansonsten ist das für JS noch nicht gesetzt. Alternativ kannst du auch dein JS anpassen.
HTML:
function ShowHide(id) {
    if (getdivstyle(id).visibility == 'visible' || getdivstyle(id).visibility == ''){
    getdivstyle(id).visibility = 'hidden';
    getdivstyle(id).display = 'none';
    }
    else {
    getdivstyle(id).visibility = 'visible';
    getdivstyle(id).display = 'block';
    }
}
dein Skript funktioniert leider nicht, da beim if ein Objekt erwartet wird, ich nehme mal an, dass es die leere visibility-Zuweisung ist...

wie ich grad schrieb, nutze ich das Skript auch auf ner anderen Seite und dort werden die Styles auch nur im Head gesetzt, da läufts allerdings problemlos
aber nach dem Einwand von Johnson, dass ich doch kein Sichtbarmachen bräuchte, hab ich mein ursprüngliches else einfach ebenfalls in ein visible umgewandelt, jetzt läuft es (womit wohl auch bewiesen wäre, dass scheinbar wirklich kein Style gesetzt is)
PHP:
<script type="text/javascript">
<!--
function getdivstyle (id) { return parent.text.document.getElementById(id).style; }

function ShowHide(id) {
    if (getdivstyle(id).visibility == 'visible'){
    getdivstyle(id).visibility = 'hidden';
	getdivstyle(id).display = 'none';
	}
    else {
    getdivstyle(id).visibility = 'hidden';
	getdivstyle(id).display = 'none';
    }
}
//-->
</script>


allerdings verstehe ich gerade immer noch nicht, wieso kein Style für das Element gesetzt sein sollte, denn im Head ist doch für das Element mit der ID='reload' doch ein visible gesetzt und zwar in der Rubrik "Styles" :hö:


MfG kbot
 
Zuletzt bearbeitet: