Moritz Bartl: pulldown-menue probleme teil 2

Beitrag lesen

ich hab das pulldown-menue meiner homepage ( www.headstrong.de ) nun komplett ueberarbeitet, damit es moeglichst browserkompatibel ist. leider ist die programmierung nicht sehr sauber, deshalb frage ich mal euch "profis", welche dinge man noch aendern sollte.

probleme:

1. netscape 6 ist entweder sehr instabil oder wird durch die seitenprogrammierung instabil; nachdem man das menue benutzt hat kann man z.b. die seite nicht mehr reloaden oder den browser neustarten - nichtmal der taskmanager von win2k kriegt ihn noch aus dem speicher (zugriff verweigert).

2. netscape 4 faellt von vornherein flach, weil er die DIVs ohne wirklich absolute positionierung nicht richtig anordnet. das wurde mir zu bloed, deshalb werden in browsercheck() dann absolute groessen verwendet - das ist ein punkt, den ich gerne aendern wuerde; absolute groessenvergabe mit pixeln koennten doch bei unterschiedlicher aufloesung zu verschobener darstellung führen, oder?
wie kann man das hier besser loesen? am allerbesten waere natuerlich eine loesung, die das auf- und zuklappen bei NN4 ermoeglichen wuerde, aber so wie ich sehe ist das unmoeglich...

hier die wesentlichen scriptbestandteile :

<script type="text/javascript" language="JavaScript">
<!--
//browsercheck from www.bratta.com
function checkBrowser(){
 this.ver=navigator.appVersion
 this.dom=document.getElementById?1:0
 this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;
 this.ie4=(document.all && !this.dom)?1:0;
 this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
 this.ns4=(document.layers && !this.dom)?1:0;
 this.bw=(this.ie5 || this.ie4 || this.ns4 || this.ns5)
 return this
}

bw=new checkBrowser()

function makeChangeTextObj(obj) {
    this.css=bw.dom? document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?document.layers[obj]:0;
}

var running=0;

// NN4 does not work - open all menus :(
  function browsercheck() {
   if (bw.ns4) {
    document.layers['datac1'].left=20;
    document.layers['datac2'].left=20;
    document.layers['datac3'].left=20;
    document.layers['datac4'].left=20;
    document.layers['datac1'].visibility='show';
    document.layers['datac2'].visibility='show';
    document.layers['datac3'].visibility='show';
    document.layers['datac4'].visibility='show';
    document.layers['menuc2'].top=62;
    document.layers['menuc3'].top=124;
    document.layers['menuc4'].top=175;
    document.layers['datac1'].top=244;
    document.layers['datac2'].top=353;
    document.layers['datac3'].top=462;
    document.layers['datac4'].top=560;
   }
  }

// for NN6/IE/OPERA :

function pop (objid) {

if ((running==1)||(bw.ns4)) return;

running=1;
 oobject1=new makeChangeTextObj('datac1');
 oobject2=new makeChangeTextObj('datac2');
 oobject3=new makeChangeTextObj('datac3');
 oobject4=new makeChangeTextObj('datac4');
 omenu1=new makeChangeTextObj('menuc1');
 omenu2=new makeChangeTextObj('menuc2');
 omenu3=new makeChangeTextObj('menuc3');
 omenu4=new makeChangeTextObj('menuc4');

oobject=new makeChangeTextObj(objid);

if (oobject.css.visibility=='visible') {
  oobject.css.visibility='hidden';
  omenu2.css.top=0;
  omenu3.css.top=0;
  omenu4.css.top=0;
 } else {
  menuheight = oobject.css.height;

if (objid!='datac4') omenu4.css.top=menuheight; else omenu4.css.top=0;
  if ( (objid=='datac1')||(objid=='datac2') ) {
   omenu3.css.top=menuheight;
   if (objid=='datac1') omenu2.css.top=menuheight; else omenu2.css.top=0;
  } else {
   omenu3.css.top=0;
   omenu2.css.top=0;
  }
  oobject.css.visibility='visible';
  if (objid != 'datac1') oobject1.css.visibility='hidden';
  if (objid != 'datac2') oobject2.css.visibility='hidden';
  if (objid != 'datac3') oobject3.css.visibility='hidden';
  if (objid != 'datac4') oobject4.css.visibility='hidden';
 }
 window.setTimeout("running=0",1); // 1 sec delay needed to prevent immediate "open-close"
   }
 //-->
 </script>

[... hier folgt der body ...]

ich verwende zwei verschiedene DIV-zuweisungen:

<DIV id="menuc1" style="position:relative;">

für die ueberschriften (anklickbar) und

<DIV id="datac1" style="position:absolute;visibility:hidden;height:80px;left:10px;">

fuer die ausklappbaren flaechen (diesen muss ich ja absolute "height" zuweisen, sonst kann ich im script nicht auf die groesse zugreifen, oder?).

ich hoffe auf jeglich tipps! danke!!

-moritz