Toon posts:

document.getElementsByName(kodoj) laat zich niet definieren

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
lon is de lengte van een array van 80 variabelen (kodoj[1], kodoj[2], kodoj[3] enz.) die elk voor zich de waarden 0, 1 of 2 kunnen aannemen. Die waarden worden gegeven door de gebruiker (inpit-keuzelijst)
Nu gaat het er om, hoe vaak de waarde 0, hoe vaak door een gebruiker de waarde 1 en hoe vaak de waarde 2 wordt gegeven. Dat wordt opgeslagen in de varabelen nbro (het aantal variabelen, dat een 2 krijgt), en sumo (aantal, dat 0 krijgt. Wat er van de 80 overblijft, heeft kennelijk een 1).
De telfunctie van de aantallen 0, 1 en 2 (door één user) is

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
function nombru(lg) { 
    nbro = 0; sumo = 0; 
    for (var i = 0; i < lon; i++) { 
    var x = document.getElementsByName(kodoj[i]); 
    if (x[0].checked === true) 
        {nbro = nbro + 1; sumo = sumo + 1;} 
    else if (x[1].checked === true) 
        {sumo = sumo + 1;} 
    else if (x[2].checked === true) 
        {continue;} 
    } 
} 


De echte functie is een stuk ingewikkelder, maar het probleem moet hier in zitten.
De echte functie heb ik gevalideerd met JSHint en het lift dus niet aan aantal haakjes of zo.
Ik krijg steeds de foutmelding x[0] is niet gedefinieerd.
Dezelfde foutmelding krijg ik, als ik niet iedere variabele (kodoj[i]) apart declareer, maar de hele array:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
function nombru(lg) { 
    nbro = 0; sumo = 0; 
    var x = document.getElementsByName(kodoj);
    for (var i = 0; i < lon; i++) { 
    if (x[i][0].checked === true) 
        {nbro = nbro + 1; sumo = sumo + 1;} 
    else if (x[i][1].checked === true) 
        {sumo = sumo + 1;} 
    else if (x[i][2].checked === true) 
        {continue;} 
    } 
} 


Al schrijvend, merk ik, dat kodoj niet tussen aanhalingstekens staat. Ik heb dat dus aangepast, maar het helpt niet.

Een ander probleem (of het met het bovenstaande samenhangt weet ik niet):
Wat moet ik doen met sde foutmelding voor javascript "screen is niet gedefinieerd".

[ Voor 1% gewijzigd door RobIII op 27-01-2018 19:20 . Reden: Code tags toegevoegd ]

Beste antwoord (via Verwijderd op 30-01-2018 15:28)


  • Klaasvaak
  • Registratie: Maart 2010
  • Laatst online: 05-10 13:10
Als ik het goed begrijp moet de variabele denprlsum gelijk zijn aan de som van de getallen in denprl en vavalsumo aan de som van vaval.
code:
1
2
3
4
5
6
function add(a, b) {
  return a + b;
}

denprlsumo = denprl.reduce(add, 0);
vavalsumo = vaval.reduce(add, 0);


Alleen heb ik geen flauw idee hoe vavalnbro berekent moet worden.

Het volgende klopt trouwens ook niet.
code:
1
2
3
4
5
6
      if(x.value != -1) { // x is een nodelist en heeft dus geen value propertie, moet dit x[i] zijn?
        valorsumo += valor[i];
        if(x.value == 1) {        // het zelfde probleem
          valornbro += valor[i];
        }
      }

[ Voor 31% gewijzigd door Klaasvaak op 29-01-2018 20:44 ]

Alle reacties


Acties:
  • 0 Henk 'm!

Verwijderd

Goh, je zou bijna denken dat document.getElementsByName(kodoj[i]) geen array teruggeeft... :)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
@Verwijderd Wil je voortaan code-tags gebruiken als je code post? Dat maakt het geheel een stuk leesbaarder...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Foxl
  • Registratie: Juli 2002
  • Niet online
En als je dan toch bezig bent, waar is de rest van je script. Waar vul je "kodoj" etc?

I'm really easy to get along with, once you people learn to worship me...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Waar ik "kodoj" invul?
Goeie vraag. Dat zijn 80 html-variabelen, die de gebruiker de waarden 0, 1 of 2 geeft.
Concreet (Lijkt de vertaling van een bepaald grondwoord (leenwoord, gewoonlijk in het Engels) in 80 verschillende talen in meer of mindere mate op dat Englese woor of niet of "dat is niet te bepalen".
Het gaat dus om een grondwoord en tachtig talen. De vertaling van het grondwoord wordt automatisch binnen het programma gegenereerd door Google Translate.
Die antwoorden (0, 1, 2) verwerkt het programma dan tot een statistiek van of het grondwoord in veel talen overgenomen is of niet. Het kan overigens ook een grondwoord uit een andere taal zijn.

Acties:
  • +1 Henk 'm!

Verwijderd

Gaan we even terug naar het probleem: stel we beginnen met de eerste, kodoj[0]. Stel dat die de waarde 'hoera' bevat. Je zoekt dan alle elementen met de naam 'hoera', en dat blijkt 0 resultaten op te leveren. Daar gaat het mis.

Probeer eens met console.log(kodoj[i]) te kijken welke waarde daarin staat, en test in ieder geval direct na de regel met "var x = ..." of je uberhaupt een resultaat hebt, en of dat 3 elementen bevat - daar is 'if' voor uitgevonden!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Okee Zaph. Mijn probleem heeft ondertussen een andere wending genomen:
In IMWeu.js declareer ik nu
JavaScript:
1
var kodoj = ["sq", "en", "bg", "cs", "da", "fi", "fr", "de", "el", "es", "hu", "it", "ca", "hr", "lt", "nl", "no", "pl", "pt", "ro", "ru", "sr", "sk", "sv", "tr", "uk"];

en daar staan ook nu drie functies gedefinieerd met
JavaScript:
1
var x = document.getElementsByName(kodoj[i]);.

Daarmee (en dank zij andere verbeteringen, vermoed ik) verdwijnt de foutmelding "x is niet gedefinieerd".
Probleem opgelost, maar een ander probleem opgedoken:

In IMWeu.js declareer ik verder:
JavaScript:
1
2
var denprl = [3602490, 60921298, 7566210, 10444720, 5493700, 5375260, 65920218, 85908420, 12235680, 38894000, 12305344, 59983110, 3930800, 5123828, 2667030, 22060000, 5134300, 39173250, 11045300, 23813047, 140067232, 8019076, 5045950, 9111000, 13937135, 33917072]; 
var vaval = [159617, 2539409, 281320, 388877, 314579, 300105, 2617776, 3291339, 719548, 1791702, 388144, 1917995, 179005, 266006, 127180, 1119597, 269635, 1828140, 375278, 655998, 7713132, 353202, 189230, 425658, 1029019, 1291290];


In intereuropeco.php declareer ik:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<script type="text/javascript" src="IMWeu.js"></script>
<script type="text/javascript" src="IMWesp.js"></script>
var lon = kodoj.length;
function kalkulu(valor) { 
    var i;
    var valornbro = 0, valorsumo = 0;
    //  la variabloj valornbro kaj valorsumo estas gheneralaj
    //  valorsumo estas la sumo de denaskaj parolantoj de akceptitaj lingvoj, respektive de potencialaj studentoj denaskaj en tiu lingvo
    for (i = 0; i < lon; i++) {
        //  valornbro estas valorsumo, limigita al la lingvoj kiuj enprenis la vorton
        var x = document.getElementsByName(kodoj[i]); //  var estas forigita antau x
        //  alert("in kalkulu(,): kodo " + kodoj[i]);
        if (x.length > 1) {
        //  Validas por la nove prezentitaj europaj lingvoj.
            if (x[0].checked === true) { //  similas
                valornbro = valornbro + valor[i];
                valorsumo = valorsumo + valor[i];
            } else if (x[1].checked === true) {  //  ne similas
                valorsumo = valorsumo + valor[i];
            } else if (x[2].checked === true) {
                continue;
            } else return;
            }
        } else {
/*  La ebleco "if (x.length = 1)" (por la kazo, ke x[0] havas "value" kaj ne statojn "x[0].checked===true" au "x[1].checked===false" ktp) ne utilas por la anglalingva versio, char tie la uzanto ne havis la eblecon iri 
tra la gravaj europaj lingvoj, de Zamenhofa.php. */
            if (x.value != -1) {  //  ne ne-difinita
                valorsumo = valorsumo + valor[i];
                //  Ili chiuj estas aferkoncernaj, do similas au ne similas.
                if (x.value == 1) {
                    valornbro = valornbro + valor[i];
                }  //  similas
            }
        }
    }
    //  alert("eind kalkulu(,)");
    elcento = Math.round(valornbro / valorsumo * 1000) / 10 + "";
}
function kalkvaval() {
    preta += 1;
    //  la tuta serio vaval (en IMWeu) estas transdonata al kalkulu(valor)
    kalkulu(vaval, 'esp');
    lE.vavalsumoLE.value = valorsumo;
    lE.vavalrezulto.value = elcento.split(".") + "% de " + miluma(valorsumo) + ", la totala v.a.valoro"; 
    lE.vavalnbroLE.value = valornbro; //  por plusendi al tutmondeco kaj de tie al raporto.php
    chesElekt();
}
function kalkdenprl() {
    //  la tuta serio denprl (en IMWeu) estas transdonata al kalkulu(valor)
    preta += 1;
    kalkulu(denprl, 'esp');
    lE.denprlsumoLE.value = valorsumo;
    lE.denprlrezulto.value = elcento.split(".") + "% de la " + miluma(valorsumo) + " e\u016Dropaj denaskaj";
    lE.denprlnbroLE.value = valornbro; //  por plusendi al tutmondeco kaj de tie al raporto.php
    chesElekt();}

Opm.: de functie miluma zet punten tussen groepen van drie cijfers in grote getallen.

De bedoeling is in principe, dat denprlsumo alle getallen van denprl optelt en denprlnbro een aantal van die getallen, op dezelfde manier, dat vavalsumo alle getallen van vaval optelt en vavalnbro een aantal van die getallen.
En nog als excuus aan Robill: Ik zie en weet niet, hoe ik programmeercode moet markeren. Sorry, geen opleiding gehad, al ben ik dan 78 jaar.

[ Voor 0% gewijzigd door RobIII op 29-01-2018 10:55 . Reden: Code tags toegevoegd ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zondag 28 januari 2018 @ 21:53:
Probleem opgelost, maar een ander probleem opgedoken
Niemand kan je helpen als je niet uitlegt welk probleem. Maar Esperanto zonder code-tags maakt het echt volstrekt onleesbaar, los nog van het feit dat GoT geen "los-mijn-probleem-even-op" forum is.

Oh, en over de code-tags - zet je code tussen onderstaande tags met vermelding van de taal (in jouw geval javascript, dus js):

code:
1
[code=js]//Zet hier je code[/code]

Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

getElementsByName returnt een array van elementen met de gespecificeerde name.

I.p.v.
JavaScript:
1
var x = document.getElementsByName(kodoj[i]);


Denk ik dat je meer kanst maakt met
JavaScript:
1
var x = document.getElementsByName(kodoj)[i];


Let wel: ik ben geen JS expert, maar volgens mij moet je je key verplaatsen.

Verder weet ik niet of welke taal kodoj, nombru, etc. is. Maar misschien moet je er eens over nadenken om je vars (voor zover het over 'generieke' zaken gaat) in het engels te definiëren. Dat maakt het altijd handiger wanneer er andere devs aan moeten werken of wanneer je bijv. hulp zoekt op een forum :>

[ Voor 30% gewijzigd door Harrie_ op 29-01-2018 09:28 ]

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • Aganim
  • Registratie: Oktober 2006
  • Laatst online: 11:06

Aganim

I have a cunning plan..

Maar Esperanto zonder code-tags maakt het echt volstrekt onleesbaar, los nog van het feit dat GoT geen "los-mijn-probleem-even-op" forum is.
Wat off-topic, maar het bevestigd in ieder geval mijn keuze om iedere programmeur bij ons net zo lang te schoppen tot ze alles, tot aan commentaar aan toe in het Engels doen en dat advies zou ik Johan Derks ook willen meegeven. Aangezien iedere noemenswaardige script- en programmeertaal toch al overwegend in de Engelse taal is opgezet is mag een zeker niveau van beheersing van het Engels verwacht worden. Hoewel het voor de 'swing factor' erg mooi is als iemand laat zien dat hij/zij een kunsttaal als Esperanto machtig is, voegt het aan code niets toe.

Engels maakt code een stuk beter leesbaar en portable, je weet nooit wie er nog eens aan moet sleutelen (of bij wie je voor hulp aan moet kloppen. :) ). Voor wie daar twijfels over heeft: probeer eens een stukje code, geschreven in het voormalig Oostblok en de bijbehorende taal te moderniseren. |:( ;w

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Aan Zaph:
Als ik schrijf "Probleem opgelost, maar een ander probleem opgedoken: ...........", dan denk ik toch, dat men begrijpt, dat het oorspronkelijke probleem (x[o] is niet gedefinieerd was dat) is opgelost.
Maar ik geef toe: ik was niet helemaal duidelijk aan het eind van mijn verhaal, dat het nieuwe (tot nu toe verborgen) probleem is, dat denprlsumo, denprlnbro, vavalsumo en vavalnbro niet de juiste waarden geven.
Aan Harry:
Volgens een expert "laat document.getElementsByName(kodoj) zich niet definieren". Als dat juist is - neem ik aan - zou document.getElementsByName(kodoj)[i] zich wel laten definiëren? Ik ga het proberen, maar dat was het volgens mij al opgeloste probleem. Helaas kon ik, door alle geexp[erimenteer niet nagaan, waar hem precies de knoop zat.
Ik ben graag bereid te vertalen, maar dan in het Nederlands (als dit ten minste een forum voor Nederlanders is).
Bedankt voor de reacties. Bericht volgt.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op zondag 28 januari 2018 @ 21:53:
En nog als excuus aan Robill: Ik zie en weet niet, hoe ik programmeercode moet markeren.
Code tags ;)
Verwijderd schreef op maandag 29 januari 2018 @ 09:47:
Ik ben graag bereid te vertalen, maar dan in het Nederlands (als dit ten minste een forum voor Nederlanders is).
Dit is een forum voor iedereen, maar we spreken hier wel, zoals je vast al gezien hebt, Nederlands ;) Commentaar in code (en code zélf) is gebruikelijk in het Engels dus ook dat is geen probleem.

[ Voor 7% gewijzigd door RobIII op 29-01-2018 11:19 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Klaasvaak
  • Registratie: Maart 2010
  • Laatst online: 05-10 13:10
Aangezien kodoj een array is, en er per iteratie een item moet worden gegeven is "x = document.getElementsByName(kodoj[i]);" correct. Uit de nodelist waaraan variabele 'x' refereert kan vervolgens met x[item] de juiste node gekozen worden.

In de functie kalkulu mist er een accolade.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function kalkulu(valor) { 
  var valornbro = 0,
      valorsumo = 0,
      i,
      x;

  for(i = 0; i < lon; i++) {
    x = document.getElementsByName(kodoj[i]);
    if(x.length > 1) {
      if(x[0].checked) {
        valornbro += valor[i];
        valorsumo += valor[i];
      } else if(x[1].checked) {
        valorsumo = += valor[i];
      } else if(x[2].checked) {
        continue;
      } else { // deze accolade ontbreekt
        return;
      } 
    } else {
      if(x.value != -1) {
        valorsumo += valor[i];
        if(x.value == 1) {
          valornbro += valor[i];
        }
      }
    }
  }//for

  elcento = Math.round(valornbro / valorsumo * 1000) / 10 + "";
};

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Helaas Klaasvaak,
Die ontbreekt in het uittreksel, maar niet in het origineel. Ik heb het programma vereenvoudigd en daarbij een accolade te veel weggenomen.
Helaas Harry,
Het buitenplaatsen van de rechte accolades roept het oorspronkelijke probleem (x is niet gedefinieerd) weer op. Dat probleem is, heb ik geprobeerd uit te leggen, opgelost.
Verder begrijp ik het gedoe over Esperanto niet. Dat er commentaar in het Esperanto tussen staat, was niet goed, maar ik ben toch verdomme vrij mijn variabelen namen te geven, die ik nodig heb, want ik programmeer niet voor Engelsen of Nederlanders, maar voor esperantisten.
Tags zijn vastgelegde termen, dus al was dat Swahili, dan zou ik die ook gebruiken.
Ook commentaar schrijf ik in het Nederlands. Als dat niet toegestaan is, sluit deze vraag dan maar. Dan is dat een puur geval van taaldiscriminatie. Wie haalt het in z'n hoofd mij te dreigen met "net zo lang schoppen, enz., terwijl je een oordeel geeft over mijn motieven van arrogantie om Esperanto commentaar te schrijven. Misschien heb je daar nooit van gehoord, maar er leven in de wereld honderden gezinnen, waar Esperanto moedertaal is. Ik spreek bv. met mijn echtgenote uitsluitend Esperanto. En als je wilt schoppen, doe dat dan je eigen kinderen, maar blijf beleefd tegen een opa.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op maandag 29 januari 2018 @ 18:08:Ook commentaar schrijf ik in het Nederlands. Als dat niet toegestaan is, sluit deze vraag dan maar. Dan is dat een puur geval van taaldiscriminatie.
Je mag alles schrijven in welke taal je maar wilt, alleen loop je dan een risico dat het voor anderen niet of nauwelijks leesbaar is. Ik ben om die reden afgehaakt, bijvoorbeeld - ik heb geen zin onleesbare code door te worstelen om jouw probleem op te lossen.
Wie haalt het in z'n hoofd mij te dreigen met "net zo lang schoppen, enz...
Niemand dreigt daarmee - hij probeerde alleen duidelijk te maken dat hij van zijn programmeurs geen andere taal dan Engels accepteert, wat net zo valide is.
En als je wilt schoppen, doe dat dan je eigen kinderen, maar blijf beleefd tegen een opa.
Respect verdien je, dat krijg je niet standaard... ;)

Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Klaasvaak
  • Registratie: Maart 2010
  • Laatst online: 05-10 13:10
Als ik het goed begrijp moet de variabele denprlsum gelijk zijn aan de som van de getallen in denprl en vavalsumo aan de som van vaval.
code:
1
2
3
4
5
6
function add(a, b) {
  return a + b;
}

denprlsumo = denprl.reduce(add, 0);
vavalsumo = vaval.reduce(add, 0);


Alleen heb ik geen flauw idee hoe vavalnbro berekent moet worden.

Het volgende klopt trouwens ook niet.
code:
1
2
3
4
5
6
      if(x.value != -1) { // x is een nodelist en heeft dus geen value propertie, moet dit x[i] zijn?
        valorsumo += valor[i];
        if(x.value == 1) {        // het zelfde probleem
          valornbro += valor[i];
        }
      }

[ Voor 31% gewijzigd door Klaasvaak op 29-01-2018 20:44 ]

Pagina: 1