Onopgeloste foutmelding

Status
Niet open voor verdere reacties.

JeroenE

Terugkerende gebruiker
Lid geworden
20 mrt 2005
Berichten
1.950
Hallo,

Na het oplossen van enkele foutjes, krijg ik de volgende foutmelding : "regel 17: resultbar is leeg of geen object".

Haal ik "docData." op regel 14 weg, dan is de melding : "regel 17: style is leeg of geen object".

De pagina is de volgende.

Wat zit er nog fout in het script?

PHP:
ns = (document.layers)?true:false;
ie = (document.all)?true:false;
function choosePoll(theQuestion,theAnswer1,theAnswer2,theAnswer3,theResult1,theResult2,theResult3) {
	var docData = document.polls;
	docData.question.value = theQuestion;
	docData.answer1.value = theAnswer1;
	docData.answer2.value = theAnswer2;
	docData.answer3.value = theAnswer3;
	docData.result1.value = theResult1+"%";
	docData.result2.value = theResult2+"%";
	docData.result3.value = theResult3+"%";
	for (i=1;i<3;i++) {
		var bar = new Array();
		var resultbar = new Array();
		if (ns) bar[i] = docData.resultbar[i];
		if (ie) bar[i] = docData.resultbar[i].style;
		bar[i].wsize = parseInt(bar[i].width);
		slide();
	}
}
function slide() {
	if (bar[i].wsize<theResult[i]*3) {
		bar[i].wsize += 1;
		bar[i].width = bar[i].wsize;
		setTimeout("slide()",5);
	}
}

Als ik met 1 enkele bar en de onderstaande code werk, dan werkt het wel.

De pagina is de volgende.

PHP:
ns = (document.layers)?true:false;
ie = (document.all)?true:false;
function choosePoll() {
	if (ns) bar = document.resultbar;
	if (ie) bar = resultbar.style;
	bar.wsize = parseInt(bar.width);
	slide();
}
function slide() {
	if (bar.wsize<250) {
		bar.wsize += 1;
		bar.width = bar.wsize;
		setTimeout("slide()",5);
	}
}

Greetz : Jer:cool:en.
 
Laatst bewerkt:
Ik heb een nieuwe ontwikkeling die ons misschien dichter bij een oplossing kan brengen.
Als ik de volgende code gebruik, waarbij ik het script op slechts 1 bar laat werken, dan krijg ik de foutmelding : "regel 23 : theResult1 is niet gedefinieerd". "theResult1" wordt echter gedefinieerd in de link waar op geklikt wordt, dus doordat slide() aangeroepen wordt vanuit de functie die op zijn beurt aangeroepen wordt door op de link te klikken, zou deze wel gedefinieerd moeten zijn daar deze een waarde krijgt in de link.

PHP:
ns = (document.layers)?true:false;
ie = (document.all)?true:false;
function choosePoll(theQuestion,theAnswer1,theAnswer2,theAnswer3,theResult1,theResult2,theResult3) {
	var docData = document.polls;
	docData.question.value = theQuestion;
	docData.answer1.value = theAnswer1;
	docData.answer2.value = theAnswer2;
	docData.answer3.value = theAnswer3;
	docData.result1.value = theResult1+"%";
	docData.result2.value = theResult2+"%";
	docData.result3.value = theResult3+"%";	if (ns) bar1 = docData.resultbar1;
	if (ie) bar1 = resultbar1.style;
	bar1.wsize = parseInt(bar1.width);
	slide();
}
function slide() {
	if (bar1.wsize<theResult1*3) {
		bar1.wsize += 1;
		bar1.width = bar1.wsize;
		setTimeout("slide()",5);
	}
}

Heeft iemand al een idee wat er misloopt?

Greetz : Jer:cool:en.
 
Laatst bewerkt:
(ff kort het bovenste script, ik kijk later nog eens beter :))

var bar = new Array();

hoort buiten de functie choosePoll te staan, anders is het een lokale variabele die alleen binnen de functie choosePoll bestaat.

var resultbar = new Array(); weglaten
resultbar[1] is niet hetzelfde als resultbar1, het kan met eval() opgelost worden:

if (ns) bar = eval('docData.resultbar' + i);
if (ie) bar = eval('docData.resultbar' + i + '.style');


Vr.Gr. Egel.
 
Hey Egel,

Dank je om te reageren en al wat meer informatie te geven.

Ik moet bekennen dat ik dat van die array buiten de functie eigenlijk al wist, maar natuurlijk niet aan gedacht. Goed dus dat je me daar even aan herinnerde :thumb: .

Dat met die eval zal ik doen, maar wist ik niet. :D

Greetz : Jer:cool:en.
 
Zoals:
Code:
<form name="f">
 <input type="text" name="t" value="Werkt">
 <input type="text" name="t" value="in">
 <input type="text" name="t" value="IE">
 <input type="text" name="t" value="en">
 <input type="text" name="t" value="Fx">
</form>
<script>
 var a = document.f.t;
 alert(a[0].value);
 a[3].value = 'en ook in';
</script>
werkt het waarschijnlijk het best! :)

Dus resultbar1, resultbar2 ... allemaal resultbar noemen in je formulier, eval heb je dan niet nodig.

Bij een radiobutton (zelfde name met steeds een andere value) onstaat er een array, van IE wist ik dat die dat ook bij andere formuliervelden doet. Maar het blijkt ook te werken in Firefox, Opera en Netscape, het zal dus wel standaard zijn. :cool:


Groet, Egel.
 
Laatst bewerkt:
Prachtig om te zien dat er een mogelijke oplossing is. :thumb: Dank je wel alvast. :cool: Ik zal het proberen en de uitkomst vermelden in mijn volgend antwoord. :D

Greetz : Jer:cool:en.
 
Hallo,

Jammer genoeg werkt het op deze laatste manier ook niet :(, of ik blijf een fout maken. :confused:

In de bijlage zit het html-document waar de volledige broncode kan bekeken worden. Zo krijg je misschien een beter beeld van de situatie.

Greetz : Jer:cool:en.
 

Bijlagen

Het werkt :), behalve dan voor een oude netscape :(

De setTimeout is niet goed werkend te krijgen als die een functie aan moet roepen met parameters. Dat is opgelost door globale variabelen te gebruiken.

Het script definieerd een functie afhankelijk van het bestaan van document.getElementById, document.all of document.layers, en gebruikt vervolgens ook diezelfde methode om de balkjes te bewegen. Alleen voor document.layers heb ik nog geen werkende functie, maar dat is alleen voor oudere netscape's.

Hoe minder balkjes bewegen hoe sneller ze gaan (altijd 1px per 10ms) en de percentages worden pas weergegeven als de balkjes klaar zijn.

In de html zijn answer1, 2 & 3 en result1, 2 & 3 vervangen door answer en result zodat answer[0], [1] enz werkt.

De broncode maakt waarschijnlijk het meest duidelijk :).


Vr.Gr. Egel.
 

Bijlagen

Dank je wel egel.

Het werkt perfect. :thumb:

Onderaan de pagina's komt een dankwoordje voor het helpen aan dit script met je nick erbij en een verwijzing naar helpmij.nl (als dat van de moderators mag natuurlijk).

Greetz : Jer:cool:en.
 
Graag gedaan! Het werkt ook allemaal mooi zo te zien.

Het is prima dat je m'n nick vermeld :o:D. Alleen werkt een link naar een profiel alleen voor mensen die zijn ingelogd bij helpmij.nl en die dat ook met coockies doen, dus zonder link lijkt me beter, er staat ook eigenlijk geen info in m'n profiel. Naar www.helpmij.nl linken mag natuurlijk altijd, dat lijkt me tenminste zo.


Vr.Gr. Egel.
 
Hey,

Komt in orde met die link. ;)
Dat is het minste wat ik kan doen hé. :thumb:
Nog eens mijn dank en tot later.

Greetz : Jer:cool:en.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan