Referenceerror i.v.m. (verkeerd?) gebruik van included javascriptdocument?

Status
Niet open voor verdere reacties.

JohanDerks

Verenigingslid
Lid geworden
2 dec 2006
Berichten
82
Het php-programma is te lang, denk ik om u mee lastig te vallen. Trouwens het geheel bestaat uit tweeinleidende HTML-documenten, dan vier PHP-documenten en een stuk of vijftien referenties naar HTML-documenten voor uitleg en toelichting (en dat alles maal twee, want het programmacomplex kan in het Esperanto en in het Engels gebruikt worden, is de bedoeling ..........
Ik heb dit programma vier jaar geleden gemaakt. Had toen alles in mijn hoofd zitten en het werkte redelijk, hoewel ik geen externe gebruikers kreeg. Die vonden de structuur te ingewikkeld en het taalkundige probleem niet belangrijk genoeg. Nu ik na vier jaar de zaak weer oppak, is het erg moeilijk - met de nodige verbeteringen en moderniseringen aan te komen.
Ondertussen heb ik al verschillende fouten gevonden en is de aard van de problemen veranderd. De titel zou op dit moment kunnen zijn. Opvragen van waarden van radio buttons om mee te rekenen. Ik vermeld nu alleen de daarvoor nodige programmaonderdelen.
Ik begin met de gebruiker te laten bepalen, welke talen gebruikt moeten worden om uit te rekenen of een bepaald woord (ingevoerd door de gebruiker) voldoende "internationaal" is (en dus geesperantiseerd moet worden). Dat zijn zes europese talen - die staan vast - maar welke de zevende en laatste is, mag de gebruiker zeggen: italiaans of portugees, of zoiets als allebei voor de helft. Dat gebeurt met radio buttons:
Code:
<input type="radio" name="pI" value="it" />la itala<br />
			<input type="radio" name="pI" value="pt" />la portugala<br />
			<input type="radio" name="pI" value="ip" checked="checked" />la itala aŭ la portugala<br />
Om alle vertalingen van het ingevoerde woord in de zeven talen mee te tellen is er de functie "kalkulu()", maar die werkt niet:
Code:
function kalkulu() {
var mal = "", nbro = 0;
var x = document.getElementsByName("pI");	
	if (x.value == "ip") {  [I]// lZ is gedeclareerd als document.forms['lingvojZamenhofaj'], it en pt zijn namen van variabelen in het formulier, namelijk of de vertalingen in die talen goedgekeurd (lijkend op de "internationale" vorm) of afgekeurd zijn. [B]nbro[/B] telt het aantal goedkeuringen, [B]sumo[/B] het aantal talen.[/I]
      if (lZ.it.value == 1 || lZ.pt.value == 1) 
      {nbro += 1;}}
	else if (x.value == "it" && lZ.it.value == 1) {nbro += 1;}
    else if (x.value == "pt" && lZ.pt.value == 1) {nbro += 1;}
	else {return false;}
    for (var i = 0; i < 6; i++) {
        x = document.getElementsByName(fenro[i]);
        if (x.value == 1) {nbro += 1;} 	
        else if (x.value === 0) {continue;} 	
        else { //  Volgt een opmerking, dat de gebruiker moet goed- of afkeuren:
            alert("(Malfermu la pa\u011Don de lingvo kun kodo '" + fenro[i] + "' kaj)\n " + 
                  "marku la (ne)similecon de la traduko de '<?php echo $tradukVorto ?>' al tiu lingvo!");
        }
    }														
    [SIZE=4]if (nbro < 4) {
        mal = "mal";
    	document.getElementById("stop").style.display="inline";		
    	document.getElementById("plue").style.display="inline";
    } else {
    	document.getElementById("plue").style.display="inline";
	}
    lZ.rezulto.value = nbro + ", " + mal + "pli ol duono de 7 Zamenhofaj lingvoj";
	}[/SIZE]
</script>
Ik vraag me bijv. af:
1. Waarom wordt getElementsByName afgeraden? getElementsById is een extra attribuut, terwijl "name", denk ik, al een verplicht attribuut is.
2. Is "else {return false;}" overbodig of zelfs fout? Want er zijn maar drie mogelijkheden voor x.value: ip, it of pt.
3. fenro is de array van zes vaste talen, die meetellen. Moet ik dáár misschien [0] achter zetten?
(Het stellen van de goede vraag is misschien al de oplossing.)
Het kleiner gedrukte gedeelte geeft de uitslag: als er minder dan vier goedkeuringen zijn, dan is het woord niet automatisch geaccepteerd in Esperanto.
Ik heb geen enkele opleiding voor programmeur en ben 78 jaar, niet te oud, maar wel om hier in een vreemdtalig land (Servië) hulp te krijgen van jongere mensen, die in mijn taalhobby geïnteresseerd en deskundig zijn.
Het is nu 26 februari en ik wijzig mijn eerste bericht van 20 februari. Alle berichten tussen die twee data zijn niet meer relevant.
 
Laatst bewerkt:
Heb je commentaar gemaakt van Tussen deze drie php-formulieren .....
Heb je een </script> want die staat niet in je snippet.

Een puntje in name="abc.xyz" is toegestaan maar je maakt het jezelf niet makkelijk.
form name="lingvojZamenhofaj" (zonder puntje) voorkomt extra debug werk. Gebruik anders een _

Programmeren is als het blussen van een veenbrand (bij een groot onoverzichtelijk programma): als het vuur ergens gedoofd is, kruipt het ergens anders onopgemerkt door.
Daarom wordt er met objecten en/of gewone functies gewerkt. Die kan je elk apart testen.
 
Laatst bewerkt:
Top dat je alles hebt gedeeld :thumb:
 
Ik reageer nu, 26-2-2018 op het vandaag gewijzigde bericht, teruggedateerd op 20 februari, want ik heb wat gevonden de toevoeging van [0] achter getElementsByName(fenro) is inderdaad essentieel, maar niet genoeg, want kalkulu() deed het nogn niet. Gelukkig kwam er een foutmelding "notfenstro"is niet gedefinieerd. Dat hangt samen met het volgende HTML-stukje
HTML:
<td align="right"><button type="button" style="text-align: center; background: #66FFFF; width: 120px" 
			onclick="sltu=true; if (notfenstro) {notfenstro.close()};">
				Ne plu montru<br />
				ŝprucfenestron.</button>
	</td>
Notfenstro (noteervenster) bevat achtergrondgegevens bij iedere goedgekeurde taal in een pop-up-vorm. Als dat de gebruiker verveelt, kan hij op bovenstaande button drukken. Daardoor wordt sltu true en komt er geen notfenstro meer bij volgende goedkeuringen.
Maar notfenstro wordt beschreven in een included javascript-document met de naam IMWesp.js (naast IMWeng.js voor de engelstalige versie) in een js-functie marku(allingvo, jugh, tutm), die bevat
Code:
        if (notfenstro !== undefined) {notfenstro.close();}
        mesagh = "La lingvo kun kodo '" + allingvo + "' estas denaske parolata " + kie + " de " + denprl[j] + " homoj.\n";
                 "Se la denaskaj parolantoj de la lingvo kun kodo '" + allingvo + "' enirus la triagradajn " +
                 "edukinstitutojn proporcie al sia nombro en la enloĝantaro, en \u0109iu lando aparte, " + vaval[j] +
                 " studentoj povus rekoni la vorton en sia lingvo '" + allingvo + "'.";
        var notfenstro = window.open('', 'noto', 'titlebar=0, status=0, toolbar=0, left=0, top=0, width=500, height=30');

	    tekst = '<HTML><HEAD><TITLE>Muspremu la bluan butonon en la patra fenestro<br />' +
                'por ne plu montri \u0109i-tiun ŝprucfenestron.' + 
				'</TITLE></HEAD><BODY onload="self.focus setTimeout(self.close(),2000)">';
        tekst += mesagh += '</BODY></HTML>';
        notfenstro.document.write(tekst);
        notfenstro.document.close();
		window.status = "Muspremu la bluan butonon en la patra fenestro por ne plu montri ĉi-tiun ŝprucfenestron.";
		if (notfenstro !== undefined) {notfenstro.focus();}
Nu de hamvraag: Waar moet ik notfenstro declareren en hoe: In het (bovenaan het hoofddocument) included document IMWesp.js, of in het hoofddocument, als var notfenstro;? als var notfenstro = iets als boolean;? Wat voor type variabele is een een window eigenlijk?
Ik weet, dat dat de oplossing van het kalkulu-probleem is, want als ik de button van de eerste snippet nu maar niet gebruik, komt er een uitkomst uit "kalkulu()"! notfenstro, denk ik dan, kan als variabele binnen IMWesp.js gedeclareerd worden.
Ojee, ik zie net, dat ik notfenstro daar al gedeclareerd heb:
Code:
var notfenstro = window.open('', 'noto', 'titlebar=0, status=0, toolbar=0, left=0, top=0, width=500, height=30');
Kennelijk is dat niet genoeg voor het hoofddocument, waar staat
Code:
if (notfenstro) {notfenstro.close()};
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan