Hoe kun je de waarde van een HTML attribuut gebruiken in javascript?

Status
Niet open voor verdere reacties.

JohanDerks

Verenigingslid
Lid geworden
2 dec 2006
Berichten
82
Stel (dit is een verregaande vereenvoudiging van het probleem):
Ik heb een button in een document "interEuropa" met een formulier "talen_van_Europa", afgekort "tE":
Code:
 <button type="button" onclick="javascript: lingvonbro=tE.lingvonbro.value;
lingvosumo=tE.lingvosumo.value; nombruKonklud();">
De functie nombruKonkl () zit in een included js-document (src="IMWesp.js"), waarvan de belangrijkste regels zijn:
Code:
function nombruKonkl() {
    nombru("esp"); 
    tE.lingvonbro.value = lingvonbro;
    tE.lingvosumo.value = lingvosumo;
}
Die functie wordt in het document na de introductie van <form name="talen_van_Europa"> en de definitie van tE.
De waardeberekening van lingvonbro en lingvosumo gebeurt, zoals je hierboven ziet, in nombru("esp"), maar die functie staat in een ander included js-document (src="IMWeu.js"):
Als ik uit nombru(lg) - lg kan de waarde "esp" aannemen, voor de Esperanto-versie van de app en "eng" voor de Engelse versie - de ballast verwijder, blijft er over :
Code:
1 function nombru(lg) {
2	for (var i = 0; i < lenE; i++) { 
3		x = document.getElementsByName(kodoj[i]);  
4		    if (x.length > 1) {
5                    if (x[0].checked) {
6				lingvonbro += 1;
7			  }
8                    if (x[2].checked == false) {
9				lingvosumo += 1;
10			  }
11		    } else {  
12                    if (x[0].checked) {
13				lingvonbro += 1;
14			  }
15		        lingvosumo += 1;
16		    }
17         }
18     }
19}
In nombru(lg) is lingvonbro niet lokaal gedeclareerd, omdat het included js-document niet alleen bij het document "interEuropa" ingesloten wordt, maar ook bij een document "interZamenhof" en de initialisatiewaarde is daar anders dan bij "interEuropa". Om de functie nombru("esp") in beide documenten te kunnen gebruiken, heb ik bedacht, dat de toe wijzingen lingvonbro = tE.lingvonbro.value; lingvosumo = tE.lingvosumo.value (zie de tekst van de button, waar ik mee begon) correcte globale declaraties zouden zijn.
Maar nu twijfel ik daar aan, want ik krijg steevast de foutmelding "lingvonbro op regel 6 niet gedefinieerd".
Ik vermoed, dat de waarde van een HTML attribuut, zoals lingvonbro, niet op deze manier naar een javascript-snippet gecopieerd kan worden. Verwarrend, want het omgekeerde kan volgens mij wel: aan een HTML-attribuut via javascript een bepaalde waarde toekennen.
Sorry voor de complexe structuur. Ik kan de vraag niet verder vereenvoudigen! Iedere vraag of commentaar is welkom.
 
Laatst bewerkt:
Ik weet niet of je bij je buttonclick eventueel "var" moet gebruiken.

Heb je al geprobeerd om "window.lingvonbro" te gebruiken? (eventueel na aanpassing van "VAR" in je button)
 
Waarom van die onbeschrijflijke namen? Normaal is Engels de voertaal in de programmeerwereld. Zowel in de syntax als de functionnamen.
Stel je voor dat je een andere buitenlands developer krijgt, dan wordt het heel lastig voor hem om duidelijkheid te krijgen wat lingvonbro precies doet. Plus dat het de kans op typefouten vergroot.
 
Ik vind het heel vervelend om u te moeten tegenspreken, maar wat "normaal" is, is geen verplichting. Ik programmeer uitsluitend in Esperanto en - behalve dat - het is met mijn Servische vrouw mijn enige voertaal.
Als de Nederlanders in het algemeen wat meer identiteitsbesef hadden, zouden ook de programmeurs onder hen uitsluitend Nederlandse namen gebruiken, dus niet - om een simpel voorbeeld te noemen - radiobutton, maar radioknop. Dat doe ik consequent, hoewel ik besef, dat ik een compromis moet sluiten met mensen, die alleen wat Engels is "normaal" vinden.
Misschien hebt u al gemerkt, dat de namen die ik gebruik nogal begrijpelijk zijn: lingvonbro als afkorting van lingvonombro = taal-aantal, lingvosumo = talensom, tE voor "talen_in_Europa", hoewel dat in mijn programma "lE"= lingvoj Eŭropaj is.
Van de ouderen ergert meer dan de helft zich dagelijks groen en geel aan het Engels in het Nederlands.
Ik leerde als scholier Duits, Engels, Frans, Grieks, Nederlands en Latijn. Dat nu veel minder mensen nog een beetje Frans verstaan, is hun probleem.
Als u zou willen, kunt u ook Esperanto leren, dat is in Wikipedia qua aantal artikelen de 32e taal. De uitsluiting of marginalisering van mensen, die geen Engels kunnen spreken (althans niet op conversatieniveau) is een ernstig sociaal probleem, dat onze democratie belemmert.
Overigens ik ben erg blij, dat deze site bestaat en ik niet gedwongen ben om stack_overflow te gebruiken, waar ze ook, uit onwetendheid waarschijnlijk, de "dommen" discrimineren. Ik neem aan, dat ik hier geen buitenlandse ontwikkelaars nodig heb en dat er genoeg intelligente mensen zijn, die mijn probleem goed begrijpen.
Hoc dixim.
 
Laatst bewerkt:
Ik weet niet of je bij je buttonclick eventueel "var" moet gebruiken.

Heb je al geprobeerd om "window.lingvonbro" te gebruiken? (eventueel na aanpassing van "VAR" in je button)

Ik heb alles, wat je suggereert, geprobeerd, met de volgende resultaten:

1. Het voorvoegen van var laat 'lingvonbro' ongedefinieerd.
2. Het voorvoegen van var window. geeft als foutmelding:
SyntaxError: unexpected token: '.'[Meer info] intereuropeco.php:1:22
De plaatsindicatie 1:22 verwijst naar de letters, voorzover ik begrijp, op de 22ste plaats van de regel(s) vóór de doc-declaratie:
Code:
<?php ini_set('display_errors',1);
$EspVorto = $_POST['EspVorto'];
$fontVorto = $_POST['fontVorto'];
?>
Dus een onbegrijpelijke foutmelding, maar de derde suggestie is zeer interessant: voorvoeging van alleen window.
Dat geeft een lingvonbro (talen-aantal) van tien, in de vorm '1111111111'. Ook lingvosumo (talen-som) is juist:
'11111111111111111111111111'
Ik moet dus alleen nog zorgen, dat de declaratie als getal wordt herkend. Daar moet ik nog even over nadenken.
 
Als je goed leest heb ik nooit 'var window' gesuggereerd :) Alleen dat je eerst de var verandering moet doen voor het gebruik van window.<var>

Dat laatste overigens alleen als je "STRICT" opties gebruikt. Omdat je niet aangaf of je in strict mode aan het ontwikkelen was wilde ik alleen aangeven dat de VAR verandering voor de window aanpassing moest (in strict moeten global vars specifiek met VAR aangeduid worden)

met
Code:
parseint
moet je een eind komen
 
Dat vermoedde ik al, dat var window. niet je bedoeling was. Ik heb het voor de zekerheid toch maar geprobeerd.
Of ik "STRICT" optie gebruik weet ik niet. Mijn doc-declaratie is
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml">
Ik begrijp niet, wat je schrijft, dat de VAR verandering voor de window aanpassing moest (in strict moeten global vars specifiek met VAR aangeduid worden).
Verder neem ik aan, dat je parseint aanbeveelt om '111111111' te veranderen in '10'.
Ik ga dat proberen.
 
Om te voorkomen dat ik een string in plaats van een getal krijg heb ik zo ongeveer alles van stal gehaald:
In het document intereuropeco.php staat de button:
Code:
<button style="width: 100px" type="button" onclick="javascript: window.lingvonbro=Number(lE.lingvonbro.value); window.lingvosumo=Number(lE.lingvosumo.value); nombruKonkl(); chesElekt();">
De globale getalvariabele lingvonbro (lingvosumo volgt hetzelfde pad) wordt gebruikt in de functie nombru("esp"), die in nombruKonkl zit.
Eerst gebruikte ik daar lingvonbro += 1, maar omdat dat geheid een string opleverde (4111111111 in plaats van 13), heb ik dat vervangen door lingvonbro = lingvonbro + 1.
Maar zelfs dat bleek niet voldoende, zodat ik er lingvonbro = Number(lingvonbro + 1) van heb gemaakt. Eindelijk: 13!
Omdat de waarde van lingvonbro na dze bewerking in nombru doorgestuurd moet worden naar een volgend document (tutmondeco.php), staat direct achter nombru("esp") de toekenning lE.lingvonbro.value = lingvonbro. Ik ben benieuwd, hoe het het GETAL 13 binnen tutmondeco.php vergaat.
Bedankt voor de hulp!

Overigens ik ben maar niet begonnen aan "use strict", want vanwege de included js-documenten met gebruik van veel globaal gedefinieerde variabelen, kreeg ik een enorme reeks "fouten".
 
@johanderks. Het is off-topic maar ik geef php4u in deze gelijk om 3 redenen
- Alle belangrijke programmeertalen hebben een Engelstalige syntax.
- Wereldwijd hebben Engelstalige variabelen de voorkeur, dit dient een gemeenschappelijk doel nl. leesbaar voor de community.
- Onderhoud, aanpassingen en uitbreidingen door andere personen gaat makkelijk als iedereen "Engelstalig" programmeert.

Bij een programmeer cursus of beginnend programmeur worden wel variabelen gebruikt in een andere taal maar daar is de achterliggende reden dat er een goed onderscheid moet zijn tussen syntax en eigen naamgeving. Op forums vraag je hulp aan de community en dan zijn Engelstalige variabelen gebruikelijk.

Overigens geef ik op dit forum soms Nederlandstalige variabelen als uit de vraag blijkt dat iemand geen ervaring heeft met de betreffende programmeertaal, dit alleen om de reden dat een code snippet voor die persoon makkelijk leesbaar moet zijn.
 
Laatst bewerkt:
Ik denk, dat de "waarheid" in het midden ligt, maar ik reageer liever niet meer met nieuwe argumenten of probleemsituaties.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan