"top." deklaration ignoriert
SnugBug
- javascript
Jaja ich weiss, das gabs hier schon öfters und ich bin mit der Forensuche auch schon auf mehrere Threads gestoßen. Zwar waren die lösungsbeschreibungen durchweg schlüssig, aber irgendwie ist bei mir noch der wurm drin.
Also es geht um ein aufklappbares Seitenmenue und dem nicht funktionieren mit firefox, durch den Fehler "top." deklaration ignoriert.
Hier der denk ich mal relevante Code Part dazu:
<script language="JavaScript">
<!--
var stayFolded=false
var n = (document.layers) ? 1:0;
var ie = (document.all) ? 1:0;
var browser=((n || ie) && parseInt(navigator.appVersion)>=4)
function makeMenu(obj,nest){
nest=(!nest) ? '':'document.'+nest+'.'
this.css=(n) ? eval(nest+'document.'+obj):eval('document.all.'+obj+'.style')
this.ref=(n) ? eval(nest+'document.'+obj+'.document'):eval('document');
this.height=n?this.ref.height:eval(obj+'.offsetHeight')
this.x=(n)? this.css.left:this.css.pixelLeft;
this.y=(n)? this.css.top:this.css.pixelTop;
this.hideIt=b_hideIt; this.showIt=b_showIt; this.vis=b_vis; this.moveIt=b_moveIt
return this
}
function b_showIt(){this.css.visibility="visible"}
function b_hideIt(){this.css.visibility="hidden"}
function b_vis(){if(this.css.visibility=="hidden" || this.css.visibility=="hide") return true;}
function b_moveIt(x,y){this.x=x; this.y=y; this.css.left=this.x+"px"; this.css.top=this.y+"px"}
Danke schonmal jetzt für Antworten ... ich steh gerade irgendwie auf der Leitung.
Hi,
var n = (document.layers) ? 1:0;
var ie = (document.all) ? 1:0;
var browser=((n || ie) && parseInt(navigator.appVersion)>=4)
Hier sprichst Du als "browser" den Netscaspe 4 und den IE ab Version 4 an - sowie noch weitere, die sich zu document.all bekennen. Firefox tut das nicht!
Wozu diese bestimmt schon 10 Jahre alte Abfrage?
this.css=(n) ? eval(nest+'document.'+obj):eval('document.all.'+obj+'.style')
und hier wird's dann auch noch evil.
Du solltest wirklich auf die Suche nach einem vernünftigen Script gehen, als hier Flickschusterei zu betreiben.
freundliche Grüße
Ingo
Moin!
Also es geht um ein aufklappbares Seitenmenue und dem nicht funktionieren mit firefox, durch den Fehler "top." deklaration ignoriert.
Glaube ich nicht.
Hier der denk ich mal relevante Code Part dazu:
Richtig. Insbesondere die ersten Zeilen zeigen, dass du da Code aus dem Museum ausgegraben hast:
> <script language="JavaScript">
> <!--
> var stayFolded=false
> var n = (document.layers) ? 1:0;
> var ie = (document.all) ? 1:0;
> var browser=((n || ie) && parseInt(navigator.appVersion)>=4)
Was sehen wir: Abfrage auf IE 4 und Abfrage auf Netscape 4. Berücksichtigung von Netscape 6+, IE5+, Opera, Konqueror, Safari etc.: FEHLANZEIGE.
Alles, was danach nicht funktioniert, liegt primär daran, dass dein Skript davon ausgeht, es gäbe document.layers und document.all. Von document.getElementById() hingegen hat es noch nie gehört.
Aktualisiere mal deine Zugriffsmethoden auf Seitenelemente - dann kann man weiter sehen.
Abgesehen davon ist in deinem Code nach meiner Ansicht viel zuviel eval() enthalten:
> function makeMenu(obj,nest){
> nest=(!nest) ? '':'document.'+nest+'.'
> this.css=(n) ? eval(nest+'document.'+obj):eval('document.all.'+obj+'.style')
> this.ref=(n) ? eval(nest+'document.'+obj+'.document'):eval('document');
> this.height=n?this.ref.height:eval(obj+'.offsetHeight')
> this.x=(n)? this.css.left:this.css.pixelLeft;
> this.y=(n)? this.css.top:this.css.pixelTop;
> this.hideIt=b_hideIt; this.showIt=b_showIt; this.vis=b_vis; this.moveIt=b_moveIt
> return this
> }
- Sven Rautenberg
Moin!
Danke für die Anhaltspunkte. Das Skript gammelte noch in meinen Archiven rum und ich dachte man könnts heute noch verweden, zumal ich mich in letzter Zeit weniger bis gar nicht mit Javascript auseinandergesetzt habe.
Ich habs mehr oder weniger geflickt bzw. teilweise neu geschrieben, so dass es an gleicher stelle mit gleicher funktion weiterwerkeln kann.