Fehler Objekt erforderlich

Nospherates

Erfahrenes Mitglied
Hallo!
Ich habe ein für mich seltsam anmutendes Problem. Habe mich jetzt einige Zeit damit auseinander gesetzt und komm nicht wirklich dahinter. Vermutungen bezüglich der QUelle des fehlers habe ich zwar, aber da ich kein JS Profi bin bräuchte ich da nun doch Hilfe. Erstmal zu der Sache an sich.

Vorhaben:
Ich möchte eine dynamische Anzahl von vorhanden "Dateiblocks" auflisten. Zu jedem dieser Blocks gibt es 1 bis X Dateien die man sich ebenfalls ansehen kann, aber nur wenn man will. Es muss möglich sein sowohl den gesamten Block als auch nur eine Datei mittels eines Links "fertig melden" zu können. Ist das geschehen taucht erhält die Datei einen anderen Status. Warum und wie das genau realisiert wird hat aber nichts mit dem JS zutun, da geht es nur um die Anzeige.

Umsetzung:
Ich habe mir ein Script aus dem Netz gesucht mit dem ich ein Klapp-Menü darstellen kann. Das habe ich eingebaut entsprechend angepasst soweit nötig und es funktioniert an sich auch. Ich habe außerdem eine kleine JS Funktion geschrieben welche die Statusänderung der einzelnen Dateien bewirkt, klappt auch super.

Problem
Kann man sich ja nun schon fast denken. Das Aufrufen des Scripts für den gesamten Block ist das Problem. Erstmal der relevante Code:

HTML:
im Head:
<script language="JavaScript" type="text/javascript">
function fileready(path) {
	if (confirm("Soll wirklich abgeschlossen werden?")) {
		window.location.href=path; 
	}else {
	}
}


 FoldNumber=337
</script>

im Body:


<div id="divCont"> <!-- These are the contents of the foldoutmenu. -->
<div id="divTop0" class="clTop">
<a href="#" onclick="menu(0); return false" onfocus="this.blur()"style='color:red'> I07030 (Dateien: 02)</a>
<!--Hier kommt der kritische Aufruf-->
<a onClick='javascript:fileready(production.jsp?typ=qsall&id=I07029)' href='#'>Fertig melden</a>
<!-- Es folgen die einzelnen Dateien -->
<div id="divSub0" class="clSub">
<table>
<tr><td width=150> Art </td> <td width=100> Typ </td> <td width=100> Fallzahl </td><td width=250> </td> </tr>
<tr style='color:red'> <td width=150>Standard</td><td width=100>HAUP</td><td width=100>0000026</td>
<td width=250>
<a onClick='javascript:fileready(production.jsp?typ=qs&id=21104)' href='#'>Fertig melden</a>
</td>
</tr>
</table>
</div><br>
</div>

So.. also die Funktion fileready klappt im table Bereich, quasi bei den einzelnen Files. Ruf ich sie aber in dem oberen Teil auf bekomme ich den Fehler Objekt erforderlich. Nehme ich weiter die Zeile "window.location.href=path;" aus der Funktion bekomme ich ebenfalls keinen Fehler. der Fehler kommt übrigens direkt beim Seitenaufbau und verhindert damit die Anzeige der Daten.
Meiner Meinung nach kann es nur irgendwie mit der Postionierung des Aufrufes zutun haben. Aber warum und wo dann weiß ich nicht. Bevor danach gefragt wird noch eben der Code für das Menü. Danke schonmal für evtl Hilfe, hoffe konnte mich verständlich ausdrücken.

Gruß


HTML:
/**********************************************************************************   
FoldoutMenu 
*   Copyright (C) 2001 <a href="/dhtmlcentral/thomas_brattli.asp">Thomas Brattli</a>
*   This script was released at DHTMLCentral.com
*   Visit for more great scripts!
*   This may be used and changed freely as long as this msg is intact!
*   We will also appreciate any links you could give us.
*
*   Made by <a href="/dhtmlcentral/thomas_brattli.asp">Thomas Brattli</a> 
*********************************************************************************/

function lib_bwcheck(){ //Browsercheck (needed)
	this.ver=navigator.appVersion
	this.agent=navigator.userAgent
	this.dom=document.getElementById?1:0
	this.opera5=this.agent.indexOf("Opera 5")>-1
	this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0; 
	this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
	this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
	this.ie=this.ie4||this.ie5||this.ie6
	this.mac=this.agent.indexOf("Mac")>-1
	this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0; 
	this.ns4=(document.layers && !this.dom)?1:0;
	this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)
	return this
}
var bw=new lib_bwcheck()



/*** variables you can configure ***/

//FoldNumber = 6					//How many toplinks do you have?
var stayFolded = false			//Stay open when you click a new toplink?
foldImg = 1						//Do you want images (if not set to 0 and remove the images from the body)?
mainOffsetY = 0					//Vertical space adjustment between the main items, in pixels.

//This is the default image.
//Remember to change the actual images in the page as well, but remember to keep the name of the image.
var unImg=new Image();
unImg.src='pics/arrow_closed.gif'

var exImg=new Image();					//Making an image variable...
exImg.src='pics/arrow_open.gif'	//...this is the source of the image that it changes to when the menu expands.

// NOTE: if you change the position of divCont from absolute to relative, you can put the foldoutmenu in a table.
// HOWEVER it will no longer work in netscape 4. If you wish to support netscape 4, you have to use absolute positioning.

/*** There should be no need to change anything beyond this. ***/

// A unit of measure that will be added when setting the position of a layer.
var px = bw.ns4||window.opera?"":"px";

if(navigator.userAgent.indexOf('Opera')>-1 && document.getElementById){ //Opera 5 resize fix.
	scrX= innerWidth; scrY= innerHeight;
	document.onmousemove= function(){
		if(scrX<innerWidth-10 || scrY<innerHeight-10 || scrX>innerWidth+10 || scrY>innerHeight+10){
			scrX = innerWidth;
			scrY = innerHeight;
			initFoldout();
		}
	};
}

//object constructor...
function makeMenu(obj,nest){
	nest= (!nest)?"":'document.'+nest+'.';
	this.el= bw.ie4?document.all[obj]:bw.ns4?eval(nest+'document.'+obj):document.getElementById(obj);	
   	this.css= bw.ns4?this.el:this.el.style;
	this.ref= bw.ns4?this.el.document:document;		
	this.x= (bw.ns4||bw.opera5)?this.css.left:this.el.offsetLeft;
	this.y= (bw.ns4||bw.opera5)?this.css.top:this.el.offsetTop;
	this.h= (bw.ie||bw.ns6)?this.el.offsetHeight:bw.ns4?this.ref.height:bw.opera5?this.css.pixelHeight:0;
    this.vis= b_vis;
	this.hideIt= b_hideIt;
    this.showIt= b_showIt;
    this.moveIt= b_moveIt;
	return this
}
//object methods...
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=='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}

/************************************************************************************
This is the function that changes the sub menus to folded or unfolded state.
************************************************************************************/
function menu(num){
	if(bw.bw){
		if (!stayFolded){
			for (var i=0; i<oSub.length; i++){
				if (i!=num){
					oSub[i].hideIt()
					if (foldImg)oTop[i].ref["imgA"+i].src = unImg.src
				}
			}
			for(var i=1; i<oTop.length; i++){
				oTop[i].moveIt(0,oTop[i-1].y+oTop[i-1].h)
			}
		}
		if (oSub[num].vis()){
			oSub[num].showIt()
			if (foldImg)oTop[num].ref["imgA"+num].src = exImg.src
		}else{
			oSub[num].hideIt()
			if(foldImg)oTop[num].ref["imgA"+num].src = unImg.src
		}
		for(var i=1; i<oTop.length; i++){ 
			if (!oSub[i-1].vis()) oTop[i].moveIt(0,oTop[i-1].y+oTop[i-1].h+oSub[i-1].h+mainOffsetY) 
			else oTop[i].moveIt(0,oTop[i-1].y+oTop[i-1].h+mainOffsetY)
		}
	}
}

/*********************************************************************
The init function... there should be no need to change anything here.
*********************************************************************/
function initFoldout(){
	//Fixing the browsercheck for opera... this can be removed if the browsercheck has been updated!!
	bw.opera5 = (navigator.userAgent.indexOf("Opera")>-1 && document.getElementById)?true:false
	if (bw.opera5) bw.ns6 = 0

	oTop = new Array()
	oSub = new Array()
	//Making the objects and hiding the subs...
	for (var i=0; i<FoldNumber; i++){
		oTop[i] = new makeMenu('divTop'+i,'divCont')
		oSub[i] = new makeMenu('divSub'+i,'divCont.document.divTop'+i)
		oSub[i].hideIt()
	}
	
	//Positioning the top objects...
	oTop[0].moveIt(0,0)
	for (var i=1; i<oTop.length; i++){
		oTop[i].moveIt(0, oTop[i-1].y+oTop[i-1].h+mainOffsetY)
	}
	
	//Making the containing menu object and showing it...
	oCont = new makeMenu('divCont')
	oCont.showIt()
}

// If the browser is ok, the script is started onload...
if(bw.bw) onload = initFoldout;
 
Hi,

übergib den Pfad bei den Funktionsaufrufen mal als String:
Code:
<!--Hier kommt der kritische Aufruf-->
<a onClick='javascript:fileready("production.jsp?typ=qsall&id=I07029")' href='#'>Fertig melden</a>
Ciao
Quaese
 
Hi,
danke für die Antwort aber leider war es das nicht. Der Fehler bleibt weiterhin. Ich hab auch mal den Inhalt der js Datei direkt in die entsprechende Seite gesetzt, aber hat auch nichts gebracht :( .
Hat sonst keiner mehr eine Idee?!

Gruß
 
Hi,

wenn ich es recht überblicke, verwendest du in deinem Menü keine Bilder, die sich ändern,
wenn es aufgeklappt wird.
In einem solchen Fall musst du die Varialbe foldImg im Konfigurationsteil des JavaScriptes
auf Null setzen (foldImg = 0).

Ciao
Quaese
 
Hi,
danke auch für diese Antwort. Ich hab die Bilder eigentlich drin, aber den Codeteil der Übersichtlichkeit halber entfernt. Und wie bereits beschrieben funktioniert alles solange ich diese eine Zeile nicht einbaue.

Gruß
 
Hi,

ich hab dein Dokument hier mal nachgestellt. Ich kann die Fehlermeldung allerdings nicht nach-
vollziehen, da es problemlos funktioniert.
Eventuell stimmt die Anzahl der Menues (FoldNumber) nicht. Aber das hat wohl auch nichts mit
der auslösenden Zeile zu tun.

Ich schicke dir mein Dokument mal mit, vielleicht findest du ja etwas, was dir weiterhilft. Den Pfad
zur Bilddatei musst du wieder anpassen.

Ciao
Quaese
 

Anhänge

Hi,
hm ja danke für das Testen. Ich hab auch nochmal einiges probiert und getestet. Letzlich scheint die ganze Sache irgendwie mit dem JAVA Code zutun zu haben. Ich hab zwar keine Ahnung warum und wieso da eine Fehlermeldung im JS Stil erscheint, aber Fakt ist sobald ich den JAVA Code ein wenig abänder kommt kein Fehler mehr.
Ich hab davon abgesehen das ganze nun auch soweit umgebaut das ein selbst definiertes Meldungsfenster erscheint. Läuft jetzt demnach alles, wenn auch über einige Ecken ;).

Danke nochmal für die Hilfe/Zeit von euch.

Gruß
 

Neue Beiträge

Zurück