[javascript] controle functie waardes

Pagina: 1
Acties:

  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
hallo hallo,

ik ben bezig om een soort van controle functie te maken welke de waarde van een rijtje getallen controleert en eventueel veranderd.
het rijtje wordt aan de hand van dit html formulier opgeroepen:
code:
1
2
3
4
5
6
7
<form name=profiel_woon-leef>
<input type=text id=nummer name=verhouding_1 onchange="check_me(this.value,this.name,'verhouding')" value="">
<input type=text id=nummer name=verhouding_2 onchange="check_me(this.value,this.name,'verhouding')" value="">
<input type=text id=nummer name=verhouding_3 onchange="check_me(this.value,this.name,'verhouding')" value="">
<input type=text id=nummer name=verhouding_4 onchange="check_me(this.value,this.name,'verhouding')" value="">
<input type=text id=nummer name=verhouding_5 onchange="check_me(this.value,this.name,'verhouding')" value="">
</form>


zoals je ziet bestaat ieder formulier uit 4 textboxjes welke gecontroleerd moeten gaan worden.
Allereerst moeten het enkel gehele getallen zijn welke ingevuld mogen worden in de range van 1 tot en met 10.
tevens mag het afgeronde getal niet voorkomen in de andere vakjes.
Welke hier 4 andere zijn... maar...... ik wil de functie universeel houden, en dat is me nu nog niet gelukt, aangezien sommige formulieren/rijtjes uit 5 - 9 of 3 parameters bestaan......
de code die ik reeds heb is de volgende. Ik heb mbv comments een aantal opmerkingen geplaatst:
offtopic:
Dit is geen php code, maar javascript
is er een tag waarbij er regel nummers komen welke geen php is?

PHP:
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
<script>
function check_me(waarde,welke,factor){
    var new_waarde
    
    
        if (waarde.match(/\d\d/)){
            //twee getallen --> de waarde moet 10 worden
            new_waarde = '10';
        }else{
            //geen twee getallen---> kijken of het een 6.7 is of 6,7 getal
            if(waarde.match(/\d,\d/)){
                //de waarde heeft een comma--> geen math.floor, gewoon het eerste getal pakken:
                new_waarde = waarde.match(/\d/)
            }else{
                if(waarde.match(/\d/)){
                //als het eerste karakter een digit is afronden
                new_waarde = Math.floor(waarde);
                }else{
                //anders is het geen getal
                alert("geen getal");
                new_waarde = 'x'
                
                }
            }
            
            
        }
        //alert(new_waarde) //debug



    if (new_waarde != 'x'){// als de nieuwe waarde geen 'x' is:
        mijn_num = welke.match(/\d/)
        //het verkrijgen van de nummer van de name van het  textboxje verhouding_1 <-- de 1
        //nu dan een array maken waarin dit getal niet in voorkomt
        //hier zit ook meteen het probleem met de andere grotes van 
        //de rijtjes..... oplossing?

        if (mijn_num == '1'){
            var nummers = new Array( '2','3','4','5')
        }
        if (mijn_num == '2'){
            var nummers = new Array( '1','3','4','5')
        }
        if (mijn_num == '3'){
            var nummers = new Array( '1','2','4','5')
        }
        if (mijn_num == '4'){
            var nummers = new Array( '1','2','3','5')
        }
        if (mijn_num == '5'){
            var nummers = new Array( '1','2','3','4')
        }

        //zet nu de waarde check op x --> geeen probleem
        check = 'x'
        //doorlopen van de array nummers om te checken of de 
        //waarde daarvan gelijk is aan de nieuwe waarden

        //als dit zo is --->check =fout
         for (i=0; i<4; i++)
            {       
                var factor_2 = factor+'_'+nummers[i];
                andere_waarde = document.forms['profiel_woon-leef'].elements[factor_2].value 
                
            if(new_waarde == andere_waarde){
                check = 'fout'
                
            }
            
            }
          
        //als de waarde fout is, dus er is een overeenkomst gevonden
        //de waarde veranderen in ''
    if(check == 'fout'){
        //de waarde veranderen in ''
         new_waarde = ''

        document.forms['profiel_woon-leef'].elements[welke].value = new_waarde
        //en de border rood maken
         document.forms['profiel_woon-leef'].elements[welke].style.border = "1px solid red";

        }else{
// voor de rest is het goed om de nieuwe waarde eraan toe te kennen
// en de border zwart te maken

            
            document.forms['profiel_woon-leef'].elements[welke].value = new_waarde
             document.forms['profiel_woon-leef'].elements[welke].style.border = "1px solid black"
        }
    }
</script>



nu is mijn vraag als volgt... hoe kan ik deze functie optimaliseren en dan bedoel ik kan het makkelijker? want ik heb het idee dat het veel makkelijker kan...

en hoe kan ik nu ervoor zorgen dat de rijtjes variabel kunnen zijn en dat ik niet de functie moet aanroepen met drie variabelen....

[ Voor 27% gewijzigd door hobbeldebobbel op 30-01-2004 14:19 ]

hier zou een slimme opmerking kunnen staan
maar die staat er niet


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 10:30

crisp

Devver

Pixelated

kleine brainstorm:

HTML:
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
<html>
<head>
<title>test</title>
<script type="text/javascript">

function check_me(el) {

  if (el.value == '') return;

  if (!el.value.match(/^\d{1,2}$/)) {
    alert('ongeldige input');
    el.focus();
    return;
  }

  var t = parseInt(el.value,10);
  if (t > 10 || t == 0) {
    alert('ongeldige input');
    el.focus();
    return;
  }

  var all = el.form.elements, i = all.length;
  while (i--) {
    if (all[i] != el && all[i].value == el.value) {
      alert('dubbel!');
      el.focus();
      break;
    }
  }

}

</script>
</head>
<body>
<form action="#">
<input type="text" name="verhouding[]" onblur="check_me(this)" value="" />
<input type="text" name="verhouding[]" onblur="check_me(this)" value="" />
<input type="text" name="verhouding[]" onblur="check_me(this)" value="" />
<input type="text" name="verhouding[]" onblur="check_me(this)" value="" />
<input type="text" name="verhouding[]" onblur="check_me(this)" value="" />
</form>
</body>
</html>


misschien kan je hier wel wat uithalen ;)

Intentionally left blank


  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
de rijtjes heb ik wel variabel alleen met een omweg nu.... ik hide gewoon de over gebleven input fields... maar dat is natuurlijk geen oplossing....


//haha op hetzelfde tijdstip :)

[ Voor 13% gewijzigd door hobbeldebobbel op 30-01-2004 19:00 ]

hier zou een slimme opmerking kunnen staan
maar die staat er niet


  • hobbeldebobbel
  • Registratie: Februari 2001
  • Laatst online: 15-02-2023
grrr hij doet het bijna zoals ik will......

[ Voor 83% gewijzigd door hobbeldebobbel op 30-01-2004 19:13 ]

hier zou een slimme opmerking kunnen staan
maar die staat er niet