[JavaScript] Input controleren op lege of dubbele waardes

Pagina: 1
Acties:
  • 138 views sinds 30-01-2008
  • Reageer

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Een screenshot uit mijn cms'je:

Afbeeldingslocatie: http://www.odisys.net/images/cms.jpg

Op het moment dat iemand op "Opslaan" klikt, moeten er twee dingen gebeuren:
  • De linker kolom (Handleiding, Odisys Nieuws, etc.) moet worden gecontroleerd op lege waarden (dus: niets ingevuld)
  • de rechter kolom (handleiding, nieuws, voorwaarden, etc.) moet worden gecontroleerd op lege en dubbele waarden
Op het moment dat er lege of dubbele waardes worden geconstateerd, wil ik dit op een vriendelijke manier duidelijk maken aan de gebruiker, bijvoorbeeld:
  • de input box van de dubbele waardes eenzelfde achtergrondkleur geven (dus: boxen met dezelfde waardes krijgen dezelfde achtergrondkleur)
  • de input boxen van lege waardes een rode achtergrond geven
Mijn client-side kennis is vrij beperkt, maar ik heb al uitgezocht dat ik de waardes van de linkerkolom en de waardes van de rechterkolom in 2 array's moet stoppen. Vervolgens moet ik die array's doorlopen op lege en dubbele waardes. Mijn vragen zijn:
  • hoe doorloop ik een array om te controleren op dubbele waardes?
  • hoe orden ik die dubbele waardes vervolgens?
  • hoe ken ik vervolgens random een achtergrondkleur toe aan dezelfde waardes en hoe wijs ik die toe aan de goede input boxen?
Om wat duidelijker te maken wat ik bedoel, hier een gephotoshopped voorbeeldje van hoe mijn cms'je eruit zou moeten zien nadat de gebruiker de volgende waardes heeft ingevuld en op "Opslaan" heeft geklikt:

Afbeeldingslocatie: http://www.odisys.net/images/cms2.jpg

Vervolgens wil ik de gebruiker natuurlijk prompten om de lege waardes te vullen en de dubbele waardes te verwijderen en te hernoemen. Als alles in orde is, moet het formulier pas gesubmit worden.

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Reveller schreef op maandag 15 november 2004 @ 21:51:
• hoe doorloop ik een array om te controleren op dubbele waardes?
je doorloopt de collection document.form[idvanjeform].elements en checked bij elk element de waarden van de andere elementen
• hoe orden ik die dubbele waardes vervolgens?
door of de ID, of het gehele object in een 2 dimensonale array te pompen die je dan later kunt uitlezen..
• hoe ken ik vervolgens random een achtergrondkleur toe aan dezelfde waardes en hoe wijs ik die toe aan de goede input boxen?
gewoon een arraytje aanmaken met verschillende kleuren erin wat je dan uitleest en via object.style.backgroundColor toekent...

en andere methode kan liggen in het aanmaken en toekennen van verschillende classes

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
faabman schreef op maandag 15 november 2004 @ 22:01:
je doorloopt de collection document.form[idvanjeform].elements en checked bij elk element de waarden van de andere elementen
Zou iemand mij op weg kunnen helpen met een stukje (pseudo) code over hoe die loop vorm moet krijgen?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Reveller schreef op maandag 15 november 2004 @ 22:21:
[...]

Zou iemand mij op weg kunnen helpen met een stukje (pseudo) code over hoe die loop vorm moet krijgen?
scriptrequest zijn eigenlijk niet toegestaan hè O-)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var objForm = document.forms[id van je form];

for(var i = 0; i < objForm.elements.length; i++){
    
    // werkt alleen voor tekstvelden (input[text] / textarea)
    if(objForm.elements[i].value.length == 0){
        objForm.elements[i].className += ' leeg';
    }
    
    for(var j = 0; j < objForm.elements.length; i++){
        if(objForm.elements[i] != objForm.elements[j]){
            // waarde kom al eerder voor
            if(objForm.elements[i].value == objForm.elements[j].value){
                // hier de beide elementen een gelijke style toekennen
            }
        }
    }
}


disclaimer: niet getest :)

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
De html van het form ziet er nu (vereenvoudigd) zo uit. Hiermee wil ik controleren op lege waarden en de background van die input boxen rood maken.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<script>
function check()
{
  var objForm = document.forms[0];
  
  for(var i = 0; i < objForm.elements.node.length; i++)
  {
    if(objForm.elements.node[i].value.length == 0)
    {
      alert(objForm.elements.node[i].value);
      objForm.elements.node[i].style.backgroundColor = "red";
    }
  }
}
</script>

<form name="menu">
  <input name="node[1]" type="text" value="Handleiding">
  <input name="node[2]" type="text" value="Nieuws">
  <input name="node[3]" type="text" value="">
  <input type="button" onclick="check();" value="Opslaan">
</form>

Ik krijg als foutmelding alleen "elements.node.length" is null or not an object. Maar deze bestaat toch wel? Overigens heb ik voor wat beteeft het style.backgroundColor gedeelte een voorbeeld genomen aan [rml][ javascript] onchange: verander kleur[/rml]

[ Voor 24% gewijzigd door Reveller op 15-11-2004 23:10 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 16:00

crisp

Devver

Pixelated

Als je een collection wilt, geef ze dan ook allemaal dezelfde name:
HTML:
1
2
3
4
5
6
<form id="menu" action="#">
  <input name="node[]" type="text" value="Handleiding">
  <input name="node[]" type="text" value="Nieuws">
  <input name="node[]" type="text" value="">
  <input type="button" onclick="check();" value="Opslaan">
</form>

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function check()
{
  var objForm = document.forms['menu'];
  
  for(var i = 0; i < objForm.elements['node[]'].length; i++)
  {
    if(objForm.elements['node[]'][i].value.length == 0)
    {
      alert(objForm.elements['node[]'][i].value);
      objForm.elements['node[]'][i].style.backgroundColor = "red";
    }
  }
}

Intentionally left blank


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb nu het volgende scriptje. Als ik regel 11 t/m 16 eruit haal, werkt het perfect: lege input boxen van de 'title[]' familie worden dan rood. Echter, het tweede deel werkt niet. Wat het zou moeten doen is de 'alias[]' familie doorlopen en dubbele waardes een groene achtergrondkleur geven...wat is er voud?
code:
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
<script>
function check()
{
  var objForm = document.forms['menu'];

  for(var i = 0; i < objForm.elements['title[]'].length; i++)
  {
    if(objForm.elements['title[]'][i].value.length == 0)
      objForm.elements['title[]'][i].style.backgroundColor = "red";

    for(var j = 0; j < objForm.elements['alias[]'].length; i++)
    {
      if(objForm.elements['alias[]'][i] != objForm.elements['alias[]'][j])
        if(objForm.elements['alias[]'][i].value == objForm.elements['alias[]'][j].value)
          objForm.elements['alias[]'][i].style.backgroundColor = "green";
    }
  }
}
</script>

<form id="menu" action="#">
  <input name="title[]" type="text" value="Handleiding">
  <input name="title[]" type="text" value="Nieuws">
  <input name="title[]" type="text" value=""><br><br>
  <input name="alias[]" type="text" value="Handleiding">
  <input name="alias[]" type="text" value="Nieuws">
  <input name="alias[]" type="text" value="">
  <input type="button" onclick="check();" value="Opslaan">
</form>

[ Voor 31% gewijzigd door Reveller op 16-11-2004 16:03 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Verwijderd

Even snel zonder precies alles lezen; moet die 'i++' in die tweede lus geen 'j++' zijn?

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@TK84 - dank je, dat hielp!

Ik ben nu zover, maar het werkt nog niet zoals ik zou willen. Onder de code staat wat er fout gaat. Wie weet waar het fout gaat?
code:
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
<script>
function check()
{
  var objForm = document.forms['menu'];

  for(var i = 0; i < objForm.elements['title[]'].length; i++)
  {
    if(objForm.elements['title[]'][i].value.length == 0)
      objForm.elements['title[]'][i].style.backgroundColor = "red";
    else
      objForm.elements['title[]'][i].style.backgroundColor = "white";

    for(var j = 0; j < objForm.elements['alias[]'].length; j++)
    {
      if(objForm.elements['alias[]'][i] != objForm.elements['alias[]'][j])
      {
        if(objForm.elements['alias[]'][i].value == objForm.elements['alias[]'][j].value)
        {
          objForm.elements['alias[]'][i].style.backgroundColor = "green";
          objForm.elements['alias[]'][j].style.backgroundColor = "green";
        }
        else
        {
          objForm.elements['alias[]'][i].style.backgroundColor = "white";
        }
      }
    }
  }
}
</script>

<form id="menu" action="#">
  <input name="title[]" type="text" value="Handleiding">
  <input name="title[]" type="text" value="Nieuws">
  <input name="title[]" type="text" value=""><br><br>
  <input name="alias[]" type="text" value="Handleiding">
  <input name="alias[]" type="text" value="Nieuws">
  <input name="alias[]" type="text" value="">
  <input type="button" onclick="check();" value="Opslaan">
</form>

(Zie het plaatje hieronder)
1. in de uitgangssituatie is er 1 element van de title[] familie leeg. Alle drie de alias[] elementen hebben als value "Nieuws".
2. ik heb op "Opslaan" geklikt, en het scriptje werkt: het lege vak is rood geworden, en de drie alias[] elementen groen (ze zijn immers gelijk aan elkaar)
3. ik vul het lege vak met de waarde "Dingen". Ditzelfde doe ik met het middelste element in de alias[] familie.
4. ik druk op "Opslaan" en zie dat het script half werkt: omdat het vakje niet meer leeg is, verdwijnt de rode achtergrond (goed!). Maar er gaat iets mis in de onderste rij: Omdat "Nieuws" nog steeds 2 keer voorkomt, zou zowel het linker als rechter vakje op de onderste rij groen moeten blijven. Dit gebeurt echter niet. Wat gaat er verkeerd?

Afbeeldingslocatie: http://www.odisys.net/images/scriptje.jpg

[ Voor 16% gewijzigd door Reveller op 16-11-2004 20:00 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
* kick *

eigenlijk wat voorbarig en ongeduldig, maar ik krijg het probleem toch niet opgelost. Kan iemand mij op weg helpen?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • gsteen
  • Registratie: November 2004
  • Laatst online: 13-01-2020
Verander in je regel om je aliassen weer wit te maken eens van:

code:
1
objForm.elements['alias[]'][i].style.backgroundColor = "white";


naar:
code:
1
objForm.elements['alias[]'][j].style.backgroundColor = "white";


Dit zou volgens mij moeten werken.

"In theory, there is no difference between theory and practice. But, in practice, there is."


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb nu het volgende script (bedankt voor de toevoeging, gsteen!) :
code:
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
<script>
function check()
{
  var objForm = document.forms['menu'];

  for(var i = 0; i < objForm.elements['title[]'].length; i++)
  {
    if(objForm.elements['title[]'][i].value.length == 0)
      objForm.elements['title[]'][i].style.backgroundColor = "red";
    else
      objForm.elements['title[]'][i].style.backgroundColor = "white";

    for(var j = 0; j < objForm.elements['alias[]'].length; j++)
    {
      if(objForm.elements['alias[]'][i] != objForm.elements['alias[]'][j])
      {
        if(objForm.elements['alias[]'][i].value == objForm.elements['alias[]'][j].value)
        {
          objForm.elements['alias[]'][i].style.backgroundColor = "green";
          objForm.elements['alias[]'][j].style.backgroundColor = "green";
        }
        else
        {
          objForm.elements['alias[]'][j].style.backgroundColor = "white";
        }
      }
    }
  }
}
</script>

<form id="menu" action="#">
  <table border="0">
    <tr>
      <td>
        <input name="title[]" type="text" value="Handleiding"><br>
        <input name="title[]" type="text" value="Nieuws"><br>
        <input name="title[]" type="text" value="Dingen"><br>
        <input name="title[]" type="text" value="">
      </td>
      <td>
        <input name="alias[]" type="text" value="Handleiding"><br>
        <input name="alias[]" type="text" value="Nieuws"><br>
        <input name="alias[]" type="text" value="Handleiding"><br>
        <input name="alias[]" type="text" value="Nieuws">
      </td>
    </tr>
    <tr>
      <td colspan="2" align="right">
        <input type="button" onclick="check();" value="Opslaan">
      </td>
    </tr>
  </table>
</form>

Het werkt alleen nog niet perfect. Stel dat ik uitga van de volgende beginsituatie:

Afbeeldingslocatie: http://www.odisys.net/images/1.jpg

Als ik nu op "Opslaan" klik, is het resultaat:

Afbeeldingslocatie: http://www.odisys.net/images/2.jpg

In de rechterkolom moet worden gekeken of er dubbele (of driedubbele of...) waardes in staan. Deze dubbele waardes moeten met een unieke kleur geindentificeerd worden. Met het script in z'n huidige vorm zou je verwachten dat de andere twee dubbele entries ("product/handleiding") ook groen zouden worden. Dat gebeurt echer niet. Dat is waar de fout zit.

• waarom worden de "product/handleiding" boxen niet groen?

Uiteindelijk wil ik elk paar van dubbele (of driedubbele of ...) waarden een unieke kleur geven, zoals hieronder:

Afbeeldingslocatie: http://www.odisys.net/images/3.jpg

• hoe zorg ik ervoor dat ik de beschikking heb over een oneindig aantal (random) kleuren om de dubbele waardes te kleuren? Ik heb er eers aan gedacht een array met kleuren te vullen, maar dat is een eindig aantal. Uiteindelijk moet dit script dubbele waardes in de alias paden van een CSM gaan vullen, en het CMs is gebouwd op een in principe oneindig aantal pagina's. Vandaar dat ik dit script daar graag bij wil laten aansluiten.

[ Voor 17% gewijzigd door Reveller op 17-11-2004 16:17 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 19-05 17:10

LauPro

Prof Mierenneuke®

Even een hele snelle blik:
JavaScript:
1
for(var j = 0; j =< objForm.elements['alias[]'].length; j++)


Maar het lijkt mij niet dat je hier met problemen in productiewerk moet komen. Wanneer dit al een probleem is vraag ik me af hoe de rest van het 'cmsje' is opgebouwd. Nfi overigens.

[ Voor 6% gewijzigd door LauPro op 17-11-2004 17:50 . Reden: te laat ]

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb nu het volgende:
code:
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<script>
function check()
{
  var form  = document.forms['menu'];
  var title = form.elements['title[]'];
  var alias = form.elements['alias[]'];
  var cnt   = 0;

  var color = new Array();

  color[0]  = "green";
  color[1]  = "blue";
  color[2]  = "yellow";
  color[3]  = "orange";
  color[4]  = "lime";

  /* Nieuwe check; alle achtergronden op wit */
  for(var a = 0; a < alias.length; a++)
  {
    alias[a].style.backgroundColor = "white";
  }

  for(var i = 0; i < title.length; i++)
  {
    if(title[i].value.length == 0)
    {
      title[i].style.backgroundColor = "red";
    }
    else
    {
      title[i].style.backgroundColor = "white";
    }

    for(var j = 0; j < alias.length; j++)
    {
      if(alias[i].value == alias[j].value)
      {
        if (i != j)
        {
          alias[j].style.backgroundColor = color[cnt];
        }
      }
    }
  }
}
</script>

<form id="menu" action="#">
  <table border="0">
    <tr>
      <td>
        <input name="title[]" type="text" value="Handleiding"><br>
        <input name="title[]" type="text" value="Nieuws"><br>
        <input name="title[]" type="text" value="Dingen"><br>
        <input name="title[]" type="text" value="">
      </td>
      <td>
        <input name="alias[]" type="text" value="Handleiding"><br>
        <input name="alias[]" type="text" value="Nieuws"><br>
        <input name="alias[]" type="text" value="Handleiding"><br>
        <input name="alias[]" type="text" value="Nieuws">
      </td>
    </tr>
    <tr>
      <td colspan="2" align="right">
        <input type="button" onclick="check();" value="Opslaan">
      </td>
    </tr>
  </table>
</form>

De eerdere problemen zijn eruit. Ik heb nu nog 1 kwestie over. Als ik bovenstaande code afdraai in mijn browser, worden alle rechter vakjes groen. Wat ik echter graag wil, is dat de beide "Handleiding"en groen worden, en beide "Nieuws"-vakjes een blauwe achtergrond krijgen (color[1]). Ik weet alleen niet waar ik de cnt var moet ophogen om dit te bereiken. Ik hoop dat mijn vraag duidelijk is en iemand een oplossing weet.

[ Voor 91% gewijzigd door Reveller op 17-11-2004 20:09 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Overigens: hier wat plaatjes bij het bovenstaande ter verduidelijking. Dit is wat er gebeurt als je bij bovenstaand script op "Opslaan" klikt:

Afbeeldingslocatie: http://www.odisys.net/images/nu.jpg

En dit is hoe het eruit zou moeten zien:

Afbeeldingslocatie: http://www.odisys.net/images/straks.jpg

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • gsteen
  • Registratie: November 2004
  • Laatst online: 13-01-2020
'k geef even alleen het script terug.

Regels 34 t/m 38 heb ik toegevoegd om kleur te veranderen.
Regel 46 heb ik aangepast.

code:
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
<script>
function check()
{
  var form  = document.forms['menu'];
  var title = form.elements['title[]'];
  var alias = form.elements['alias[]'];
  var cnt   = 0;

  var color = new Array();

  color[0]  = "green";
  color[1]  = "blue";
  color[2]  = "yellow";
  color[3]  = "orange";
  color[4]  = "lime";

  /* Nieuwe check; alle achtergronden op wit */
  for(var a = 0; a < alias.length; a++)
  {
    alias[a].style.backgroundColor = "white";
  }

  for(var i = 0; i < title.length; i++)
  {
    if(title[i].value.length == 0)
    {
      title[i].style.backgroundColor = "red";
    }
    else
    {
      title[i].style.backgroundColor = "white";
    }
 
    if(alias[i].style.backgroundColor == "white")
    {
      alias[i].style.backgroundColor=color[cnt];
      cnt++;
    }

    for(var j = 0; j < alias.length; j++)
    {
      if(alias[i].value == alias[j].value)
      {
        if (i != j)
        {
          alias[j].style.backgroundColor = alias[i].style.backgroundColor;
        }
      }
    }
  }
}
</script>

"In theory, there is no difference between theory and practice. But, in practice, there is."


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Dank je, ik ben nu een heel stuk verder. Er is een echter een fout die ik er niet uit krijg. Hieronder de situatie:

1. Uitganspositie:

Afbeeldingslocatie: http://www.odisys.net/images/1-1.jpg

2. Ik klik op "Opslaan" De controle werkt perfect: in het linker rijtje worden de lege velden rood, in het rechter rijtje worden dubbele waarden hetzelfde gekleurd:

Afbeeldingslocatie: http://www.odisys.net/images/2-1.jpg

3 Ik verander "Nieuws" in "Nieuwsdingen" en klik weer op "Opslaan". Dit is het resultaat:

Afbeeldingslocatie: http://www.odisys.net/images/3-1.jpg

en dat klopt niet, want aangezien "Nieuws" en "Nieuwsdingen" unieke waarden zijn, moeten zij wit worden (en blijven):

Afbeeldingslocatie: http://www.odisys.net/images/4-1.jpg

Wie weet de voud te vinden?

[ Voor 6% gewijzigd door Reveller op 18-11-2004 14:40 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • gsteen
  • Registratie: November 2004
  • Laatst online: 13-01-2020
Dit zou moeten werken.
Extra variabele op regel 40.
Zetten van variabele bij niet uniek zijn op regel 48.
Check op uniek zijn en kleur terug zetten op regels 52 t/m 55.
code:
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
56
57
58
<script>
function check()
{
  var form  = document.forms['menu'];
  var title = form.elements['title[]'];
  var alias = form.elements['alias[]'];
  var cnt   = 0;

  var color = new Array();

  color[0]  = "green";
  color[1]  = "blue";
  color[2]  = "yellow";
  color[3]  = "orange";
  color[4]  = "lime";

  /* Nieuwe check; alle achtergronden op wit */
  for(var a = 0; a < alias.length; a++)
  {
    alias[a].style.backgroundColor = "white";
  }

  for(var i = 0; i < title.length; i++)
  {
    if(title[i].value.length == 0)
    {
      title[i].style.backgroundColor = "red";
    }
    else
    {
      title[i].style.backgroundColor = "white";
    }
 
    if(alias[i].style.backgroundColor == "white")
    {
      alias[i].style.backgroundColor=color[cnt];
      cnt++;
    }

    var isUnique=true;
    for(var j = 0; j < alias.length; j++)
    {
      if(alias[i].value == alias[j].value)
      {
        if (i != j)
        {
          alias[j].style.backgroundColor = alias[i].style.backgroundColor;
          isUnique=false;
        }
      }
    }
    if(isUnique)
    {
      alias[i].style.backgroundColor="white";
    }
  }
}
</script>

"In theory, there is no difference between theory and practice. But, in practice, there is."


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
ik heb nu het volgende:
code:
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<script>
function check()
{
  var form    = document.forms['menu'];
  var title   = form.elements['title[]'];
  var alias   = form.elements['alias[]'];
  var msg     = "Er zitten een aantal fouten in de lijst:\n\n";
  var color   = new Array("yellow", "orange", "lime");

  var cnt     = 0;
  var empty   = false;
  var empties = 0;
  var error   = 0;
  var aliases = '';

  for(var a = 0; a < alias.length; a++)
  {
    alias[a].style.backgroundColor = "white";
  }

  for(var i = 0; i < title.length; i++)
  {
    if(title[i].value.length == 0)
    {
      title[i].style.backgroundColor = "red";
      empty = true;
      empties++;
    }
    else
    {
      title[i].style.backgroundColor = "white";
    }

    if(alias[i].style.backgroundColor == "white")
    {
      alias[i].style.backgroundColor=color[cnt];
      cnt++;
    }

    var isUnique=true;

    for(var j = 0; j < alias.length; j++)
    {
      if(alias[i].value == alias[j].value)
      {
        if (i != j)
        {
          alias[j].style.backgroundColor = alias[i].style.backgroundColor;
          aliases += alias[j].value+' ';
          isUnique=false;
          error++;
        }
      }
    }

    if(isUnique)
    {
      alias[i].style.backgroundColor="white";
    }
  }

  if (empty)
  {
    msg += "- U heeft "+empties+" titels niet ingevuld.\n";
  }

  if (error)
  {
    msg += "- U heeft "+cnt+" dubbele aliassen ("+aliases+").\n";
  }

  if (empty || error > 0)
  {
    msg += "\nVerbeter de fouten en probeer opnieuw.";
    alert(msg);
  }
  else
  {
    alert("Alles OK!");
  }
}
</script>


Er zitten nog twee bugjes in:
• het tellen van het aantal dubbele aliassen (cnt) gaat niet altijd goed; zo zegt 'ie dat er drie dubbele aliassen zijn als er maar 1 dubbele is (Handleiding - Handleiding bijvoorbeeld).
• in de variabele "aliases" wil ik graag een opsomming geven van de dubbele aliassen. Nu is de waarde "Handleiding Nieuws Handleiding Nieuws" in plaats van "Handleiding Nieuws"...?
• hoe tel ik het aantal keren dat een dubbele input voorkomt (bijvoorbeeld: Handleiding komt 3 keer voor, Nieuws komt 6 keer voor, etc.)?

[ Voor 119% gewijzigd door Reveller op 18-11-2004 16:43 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • gsteen
  • Registratie: November 2004
  • Laatst online: 13-01-2020
Ik weet niet of je het al opgelost hebt ('t is inmiddels al een aantal dagen geleden). 'k heb van het weekend naar je script gekeken en één en ander toegevoegd/gewijzigd.

Regel 2: nieuwe arraytoegevoegd die bij gaat houden hoe vaak een alias voorkomt.
Regels 16/17: aanroep reset en vullen nieuwe array.
Regels 91 t/m 119: reset en vul functies.
Regels 66 t/m 73: tellen van dubbelen en display tekst maken.


code:
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<script>
var aliascount=null;
function check()
{
  var form    = document.forms['menu'];
  var title   = form.elements['title[]'];
  var alias   = form.elements['alias[]'];
  var msg     = "Er zitten een aantal fouten in de lijst:\n\n";
  var color   = new Array("yellow", "orange", "lime");

  var cnt     = 0;
  var empties = 0;
  var error   = 0;
  var aliases = '';

  resetAliasCount();
  addAliasCount(alias);

  for(var a = 0; a < alias.length; a++)
  {
    alias[a].style.backgroundColor = "white";
  }

  for(var i = 0; i < title.length; i++)
  {
    if(title[i].value.length == 0)
    {
      title[i].style.backgroundColor = "red";
      empties++;
    }
    else
    {
      title[i].style.backgroundColor = "white";
    }

    if(alias[i].style.backgroundColor == "white")
    {
      alias[i].style.backgroundColor=color[cnt];
      cnt++;
    }

    var isUnique=true;
    for(var j = 0; j < alias.length; j++)
    {
      if(alias[i].value == alias[j].value)
      {
        if (i != j)
        {
          alias[j].style.backgroundColor = alias[i].style.backgroundColor;
          isUnique=false;
        }
      }
    }

    if(isUnique)
    {
      alias[i].style.backgroundColor="white";
    }
  }

  if(empties)
  {
    msg += "- U heeft "+empties+" titels niet ingevuld.\n";
  }

  for(var i = 0; i < aliascount[0].length; i++)
  {
    if(aliascount[1][i]>1)
    {
      aliases += aliascount[0][i]+'('+aliascount[1][i]+'x)'+' ';
      error++;
    }
  }

  if (error)
  {
    msg += "- U heeft "+error+" dubbele aliassen ("+aliases+").\n";
  }

  if (empties || error > 0)
  {
    msg += "\nVerbeter de fouten en probeer opnieuw.";
    alert(msg);
  }
  else
  {
    alert("Alles OK!");
  }
}

function resetAliasCount()
{
  aliascount=new Array();
  aliascount[0]=new Array();
  aliascount[1]=new Array();
}

function addAliasCount(alias)
{
  for(var i = 0; i < alias.length; i++)
  {
    var inAliasCount=false;
    for(var j = 0; j < aliascount[0].length; j++)
    {
      if(alias[i].value == aliascount[0][j])
      {  
        inAliasCount=true;
        aliascount[1][j]+=1;
      }
    }

    if(!inAliasCount)
    {
      var length = aliascount[0].length;
      aliascount[0][length]=alias[i].value
      aliascount[1][length]=1;
    }
  }
}
</script>

"In theory, there is no difference between theory and practice. But, in practice, there is."


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
jeetje! dank je, gsteen - ik ga er vanavond uitgebreid naar kijken. Ik wilde graag geholpen worden maar dit is echt to-the-max :) Je hoort er nog van!

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."

Pagina: 1