Menü mit onMouseOver über 2 frames verteilen - Problem

Asterix-Ac

Erfahrenes Mitglied
Hallo zusammen,

ich bastle gerade an einem Menü, dass sich in einem Frameset über 2 Frames verteilt. z.B. habe ich 'Kontakt' und 'Über mich' im Fuss der Seite untergebracht.
Das Script kann 3 Button-Zustände: onMouseOut, onMouseOver und onClick(also ausgewählter Button).
Ich lade das JavaScript im Kopf- und im Fussmenü parallel.Also auch alle anderen Menüpunkte, die es im jeweils nur im anderen Frame gibt. Das einzige, was ich weglasse, ist der img-Tag.
Wenn ich nun mit der Maus über einen Button fahre, egal ob Fuss oder Kopf, hat er immer eine null/undefined Referenz im jeweils anderen Frame. Im eigenen Frame funktioniert es tadellos.
Ich poste mal mein Script zum Testen.
Achja, stört Euch bitte nicht am PHP, was da noch mit drin ist.
Schonmal Danke im Vorraus.

overengine.js:
Code:
var totalGraphics=0;	     
var graphic = new Array();   
function tocGraphic (width, height, name, statusText, link) {
  this.height   = height;
  this.width    = width;
  this.name     = name;
  this.link     = link;
  this.off      = new Image (width, height);
  this.off.src  = imageSubdirectory + imagePrefix + name + offSuffix;
  this.offname  = imageSubdirectory + imagePrefix + name + offSuffix;
  if (link != "") {
    this.on         = new Image (width, height);
    this.on.src     = imageSubdirectory + imagePrefix + name + onSuffix;
    this.pick       = new Image (width, height);
    this.pick.src   = imageSubdirectory + imagePrefix + name + pickSuffix;
    this.statusText = statusText;
  }
}

function createTocGraphic (width, height, name, statusText, link) {
  graphic[totalGraphics] = new tocGraphic(width, height, name, statusText, link);
  totalGraphics++;
}

function doClick (num) {

  
  document.images[graphic[num].name].src = graphic[num].pick.src;
  
  if (num != picked) {
    document.images[graphic[picked].name].src = graphic[picked].off.src;
  }
  picked = num;
  parent.navioben.location.href='navioben.php?wo='+graphic[num].name;
  alert(picked+","+highlighted+","+num+","+opFrame+",Click");
}


function doMouseOver(num,name) {
	
alert(opFrame+num);
  if (num != picked) {
	alert("in num != picked");
/*-------->hier tritt immer der Fehler auf*/    document.images[graphic[num].name].src = graphic[num].on.src;
  }
alert("num != picked");
  if (highlighted != picked && highlighted != num) {
    document.images[graphic[highlighted].name].src = graphic[highlighted].off.src;
  }
  alert("highlighted != picked && highlighted != num");
  highlighted = num;
alert("highlighted = num;");
  self.status = graphic[num].statusText;
alert(picked+","+highlighted+","+num+",doMouseOver,"+opFrame);
}



function doMouseOut (num) {
  if (highlighted != picked) {
    document.images[graphic[highlighted].name].src = graphic[highlighted].off.src;
  }

self.status = '';
//alert(picked+","+highlighted+","+num+",doMouseOut,"+opFrame);
}



function doOnLoad (num) {

  currentPage =  parent.frames[frameTarget].location.href;

  for (i = 1; i < totalGraphics; i++) {
    if (currentPage.indexOf(graphic[i].name) > 0) {

      doClick(i);
      return(1);
    }
  }
  if (i >= totalGraphics) {
    doClick(num);
  }
  alert(picked+","+highlighted+","+num+","+opFrame+",Load");
  return(-1);
  
}

<?
if($from == "head") {
	echo"var frameTarget = \"Seitenindex\";";
}
else if($from == "foot") {
	echo"var frameTarget = \"Haupt\";";
}
?>
var opFrame = "<?echo$from;?>";
var navTarget = "navioben";
var navFile = "navioben.php";

var picked=0;        
var highlighted=0;   

imageSubdirectory = "<?echo$mnu_folder;?>/";
imagePrefix       = "mnu.";
offSuffix         = ".nor.<?echo$format;?>";
onSuffix          = ".up.<?echo$format;?>";
pickSuffix        = ".pic.<?echo$format;?>";

kopf.html
Code:
createTocGraphic(112, 30, \"startseite\", \"Startseite\", \"sindex.php?cat=0&nav=".$nav."&scw=".$scw."\");\r
createTocGraphic(112, 30, \"produkte\", \"Produkte\", \"sindex.php?cat=1&nav=".$nav."&scw=".$scw."\");\r
createTocGraphic(112, 30, \"dienstleistungen\", \"Dienstleisungen\", \"sindex.php?cat=2&nav=".$nav."&scw=".$scw."\");\r
createTocGraphic(112, 30, \"download\", \"Download\", \"sindex.php?cat=3&nav=".$nav."&scw=".$scw."\");\r
createTocGraphic(112, 30, \"forum\", \"Forum\", \"sindex.php?cat=4&nav=".$nav."&scw=".$scw."\");\r
createTocGraphic(112, 30, \"leer\", \"leer\", \"\");\r
createTocGraphic(112, 30, \"kontakt\", \"Kontakt\", \"main.php?cat=0&nav=".$nav."&scw=".$scw."\");\r
createTocGraphic(112, 30, \"ueber_mich\", \"über mich\", \"main.php?cat=1&nav=".$nav."&scw=".$scw."\");\r


with (document) {

  open ('text/html');
    
    if (graphic[0].link != \"\") {
		
      write ('<span style=\"position:absolute;top:14px;left:180px;\"><A TARGET=\"' + frameTarget + '\" HREF=\"' + graphic[0].link + '\" onMouseOver=\"doMouseOver(0);parent.frames.fuss.doMouseOver(0); return true;\" onMouseOut=\"doMouseOut(0);parent.frames.fuss.doMouseOut(0);return true;\" onClick=\"doClick(0);parent.frames.fuss.doClick(0);return true;parent.frames.'+frameTarget+'.focus();parent.'+navTarget+'.location.href=\''+navFile+'?wo='+graphic[0].name+'\'\">');

      write ('<IMG NAME=\"' + graphic[0].name + '\" SRC=\"' + graphic[0].offname + '\" BORDER=0></a></span>');
	  

    }
    
    else {

      write ('<span style=\"position:absolute;top:14px;left:180px;\"><IMG SRC=\"' + graphic[0].offname + '\" ALT=\"' + graphic[0].name + '\" BORDER=0></span>');
    }
ich habe noch weitere if-Abfragen bis 'graphic[5]' eingebaut - wäre aber hier zu lang.
und in fuss.html habe ich das Gleiche wie in kopf.html mit graphic[6/7].

Ich hoffe, jemand wird daraus schlau. Falls nicht, bitte kurz zurückposten, versuche es dann nochmal zu erklären.

Asterix :confused:
 
Ohne mir das Skript jetzt genauer betrachtet zu haben, wäre es das Sinnvollste, du lagerst es in das oberste Dokument aus. Von den Unterseiten aus rufst du die einzelnen Funktionen dann im Elterndokument auf.

Das Problem wird einfach sein, dass du in Frame A Objekte oder sonstwas manipulierst, auf welche du dann in Frame B zugreifen willst... wo diese allerdings nicht bekannt sind.
 
Danke für Deine Antwort.
Ich habe ein wenig damit rumgespielt, aber zu keinem vernünfigen Ergebnis gekommen.
Könntest Du Dir das mal etwas genauer anschauen?

Thx, Asterix
 
Tut mir leid... anhand des von dir Geposteten müsst ich erstmal nen paar Stunden sitzen, und mir den Rest dazu aus den Fingern saugen.... wozu ich weder Lust noch Zeit habe :(
 
Zurück