[Javascript] Prijslijst die kortingen doorberekend

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

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06-2025

Gerwin

Ik ben er klaar voor!

Topicstarter
Het volgende is het idee. Er moet een soort van prijslijst gemaakt worden die alles wat aangevinkt is bij elkaar opteld en na gelang wat mensen aanvinkt automatisch kortingen berekend voor bepaalde producten die ook op de lijst staan. Als in het scriptje wat ik hieronder ga geven bijvoorbeeld Product 1 aangevinkt wordt moet automatisch Product 3 aangevinkt worden zonder dat daarvoor kosten worden berekend. Ik krijg het niet voor elkaar. Mede omdat het script zelf al de "NAME" gebruikt van de tag om dingen uit te lezen en er zelf een getal achter zet (ik weet op voorhand niet hoeveel producten er zullen zijn). Ik kan dus niet zomaar de NAME verandere naar een heel andere naam omdan dan het optelsysteem kapot is.

Ik heb dit geincluded als javascript:

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
56
function orh_select(index,object,origincolor){


    objFrm = document.forms["frmPricelist"];
    objRow = document.getElementById("row"+index)
    
    if (objRow){ // geef rij een kleur
        if(objRow.style.backgroundColor=="#b3ccd3"){
            objRow.style.backgroundColor=origincolor;
        }else{
            objRow.style.backgroundColor="#b3ccd3";
        }
    }
    
    if (index) { 
    } else { // selecteer alles
        for (i=1;i<objFrm.elements["startprice"].length;i++){
            objFrm.elements["startprice"][i].checked = object.checked;                                                  
        }
    }
    orh_calculate()
}

function orh_calculate(){
    objFrm = document.forms["frmPricelist"];
    
    intTotalStartPrice = 0;
    
    // totale start prijs
    for (i=0;i<objFrm.elements["startprice"].length;i++){
        if (objFrm.elements["startprice"][i].checked){
            intTotalStartPrice += parseFloat(objFrm.elements["startprice"][i].value);

    
        /// boodschap (LOOPT NOG NIET ZOALS HET MOET)
        if (objFrm.elements["startprice"][0].checked) {
            frmPricelist.boodschap.value = "blaat";
        }
    }
}
    
    // voeg extra toe
    intTotalStartPrice += parseFloat(objFrm.elements["extratotalstartprice"].value);
    
    
    // vul de tussenresultaat velden
    objFrm.elements["totalstartprice"].value = intTotalStartPrice;
}

function extra(form,count){
    objFrm = document.forms[form];
    objFrm.elements["extratotalstartprice"].value = parseFloat(objFrm.elements["extratotalstartpriceprijs"].value) * count;

    
    orh_calculate();
}


Dit is de HTML tot nu:

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
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
</HEAD>
<BODY bgcolor=white text=black>

<script language="javascript" src="pricelist.js"></script>

<form name="frmPricelist" action="#" method="post">
    <table style="border-collapse: collapse;" border="0" width="600">
        <tr>
            <td>Producten</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td align="right"><b>Bedrag</b></td>
            <td>&nbsp;</td>
        </tr>
        <tr id="row1">
            <td>
                <input name="startprice" value="102.64" onclick="orh_select(1,this,'#FFFFFF');" type="checkbox">
                <input name="startprice1" value="102.64" type="hidden">
            </td>
            <td>&nbsp;Product 1</td>
            <td></td>
            <td></td>
            <td >&#8364; 102,64</td>
            <td></td>
        </tr>
        <tr id="row2">
            <td>
                <input name="startprice" value="103.64" onclick="orh_select(2,this,'#FFFFFF');" type="checkbox">
                <input name="startprice2" value="103.64" type="hidden">
            </td>
            <td>&nbsp;Product 2</td>
            <td></td>
            <td></td>
            <td >&#8364; 103,64</td>
            <td></td>
        </tr>
        <tr id="row3">
            <td>
                <input name="startprice" value="34.64" onclick="orh_select(1,this,'#FFFFFF');" type="checkbox">
                <input name="startprice3" value="34.64" type="hidden">
            </td>
            <td>&nbsp;Product 3</td>
            <td></td>
            <td></td>
            <td >&#8364; 34,64</td>
            <td></td>
        </tr>
        <tr>
            <td><select name="cboExtra" onchange="extra('frmPricelist',this.value)"><option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option></select></td>
            <td>&nbsp;Product 6</td>
            <td></td>
            <td>&#8364;&nbsp;<input name="extratotalstartpriceprijs" value="35.95" type="hidden"></td>
            <td><input name="extratotalstartprice" value="0"  type="input"></td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td >&nbsp;Totaal:</td>
            <td >&nbsp;</td>
            <td >&nbsp;</td>
            <td >&nbsp;</td>
            <td >&#8364;&nbsp;<input name="totalstartprice"  type="input"></td>
            <td></td>
        </tr>
</table>
<input type=text name=boodschap size=30>
</form>

</BODY>
</HTML>


Ik heb tevens het scriptje hier online gezet.

[ Voor 49% gewijzigd door Gerwin op 24-04-2005 02:34 ]

Station van Gerwin Prins op Apple Music


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Volgens mij is dat al iets netter, hoewel het je probleem niet oplost. Hoe had je de logica in gedachten?
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
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
121
122
123
124
125
126
127
128
<html>
    <head>
        <title>whatever</title>
        <script type="text/javascript">

            function orh_select(index,object)
            {
                var objFrm = object.form;
                var objRow = document.getElementById('row'+index)

                // geef rij een kleur
                if (objRow)
                {
                    if (object.checked)
                    {
                        objRow.style.backgroundColor = '#b3ccd3';
                    }
                    else
                    {
                        objRow.style.backgroundColor = '';
                    }
                }

                if (index)
                {
                }
                else
                {
                    // selecteer alles
                    for (var i = 1; i < objFrm.elements['startprice'].length; i++)
                    {
                        objFrm.elements["startprice"][i].checked = object.checked;
                    }
                }

                orh_calculate(objFrm);
            }

            function orh_calculate(objFrm)
            {
                var intTotalStartPrice = 0;

                // totale start prijs
                for (var i = 0; i < objFrm.elements['startprice'].length; i++)
                {
                    if (objFrm.elements['startprice'][i].checked)
                    {
                        intTotalStartPrice += parseFloat(objFrm.elements['startprice'][i].value);

                        // boodschap (LOOPT NOG NIET ZOALS HET MOET)
                        if (objFrm.elements['startprice'][0].checked)
                        {
                            objFrm.elements['boodschap'].value = 'blaat';
                        }
                    }
                }

                // voeg extra toe
                intTotalStartPrice += parseFloat(objFrm.elements['extratotalstartprice'].value);

                // vul de tussenresultaat velden
                objFrm.elements['totalstartprice'].value = intTotalStartPrice;
            }

            function extra(objFrm,count)
            {
                objFrm.elements['extratotalstartprice'].value = parseFloat(objFrm.elements['extratotalstartpriceprijs'].value) * count;

                orh_calculate(objFrm);
            }

        </script>
    </head>
    <body>
        <form name="frmPricelist" action="#" method="post">
            <table style="border-collapse: collapse;" border="1" width="600">
                <tr>
                    <td>Producten</td>
                    <td>&nbsp;</td>
                    <td align="right"><b>Bedrag</b></td>
                    <td>&nbsp;</td>
                </tr>
                <tr id="row1">
                    <td>
                        <input name="startprice" value="102.64" onclick="orh_select(1,this);" type="checkbox">
                        <input name="startprice1" value="102.64" type="hidden">
                    </td>
                    <td>&nbsp;Product 1</td>
                    <td>&nbsp;</td>
                    <td>&#8364; 102,64</td>
                </tr>
                <tr id="row2">
                    <td>
                        <input name="startprice" value="103.64" onclick="orh_select(2,this);" type="checkbox">
                        <input name="startprice2" value="103.64" type="hidden">
                    </td>
                    <td>&nbsp;Product 2</td>
                    <td>&nbsp;</td>
                    <td>&#8364; 103,64</td>
                </tr>
                <tr id="row3">
                    <td>
                        <input name="startprice" value="34.64" onclick="orh_select(1,this);" type="checkbox">
                        <input name="startprice3" value="34.64" type="hidden">
                    </td>
                    <td>&nbsp;Product 3</td>
                    <td>&nbsp;</td>
                    <td>&#8364; 34,64</td>
                </tr>
                <tr>
                    <td>
                        <select name="cboExtra" onchange="extra(this.form,this.options[this.selectedIndex].value)"><option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option></select>
                    </td>
                    <td>&nbsp;Product 6</td>
                    <td>&nbsp;<input name="extratotalstartpriceprijs" value="35.95" type="hidden"></td>
                    <td>&#8364;&nbsp;<input name="extratotalstartprice" value="0" type="input"></td>
                </tr>
                <tr>
                    <td>&nbsp;Totaal:</td>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                    <td>&#8364;&nbsp;<input name="totalstartprice" type="input"></td>
                </tr>
            </table>
            <input type=text name=boodschap size=30>
        </form>
    </body>
</html>

Intentionally left blank


  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06-2025

Gerwin

Ik ben er klaar voor!

Topicstarter
Het idee was om bij optelling alle formelementen te pakken met een prijs en deze bij elkaar op te tellen zoals je ziet. Dit had de reden dat vooraf niet te bepalen is hoeveel producten er in de lijst komen te staan. (komt uit mysql database dmv een selectie op groep).

Moet wel even zeggen dat het probleem hem in de orh_calculate() functie zit en niet in die andere. Daar hadden we eerst de planning om iets te maken dat met één knopje gelijk alles uit de lijst selecteert, maar dat hebben we achterwege gelaten.

Probleem waar ik nu echter tegenoploop is het feit dat ik niet afzondelijk checkboxes kan aan of uitzetten. Als dat kon dan kon je relatief simpel een box aanzetten als een ander ook aangezet was zegmaar, feit blijft dan wel weer dat hij alles nog gewoon bij elkaar optelt, maar daar zou je achteraf iets kunnen maken dat er gekeken wordt naar bepaalde combinatie's en er dan bepaalde dingen van het totaal afgetrokken wordt. Dus eerst alles optellen, maar dan aftrekken. Blijft het probleem hoe ik in eerste instantie die box 3 geselecteerd krijg... :)

EDIT: Ik heb de bron iets verduidelijkt hier te bekijken

[ Voor 14% gewijzigd door Gerwin op 24-04-2005 03:48 . Reden: toevoeging ]

Station van Gerwin Prins op Apple Music


  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06-2025

Gerwin

Ik ben er klaar voor!

Topicstarter
Ik heb getracht met een nieuw input veld (die enkel als doel heeft te kijken hoeveel producten er zijn) geprobeert de velden zelf een naam te geven zodat ze via javascript aan of uitgezet kunnen worden. Echter ik heb niet veel succes. Er schijnt een fout te zitten in regel 43 teken 22.

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
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<html>
    <head>
        <title>whatever</title>
        <script type="text/javascript">
            
            function round(number,X)
            {
                // rounds number to X decimal places, defaults to 2
                X = (!X ? 2 : X);
                return Math.round(number*Math.pow(10,X))/Math.pow(10,X);
            }

            function orh_select(index,object)
            {
                var objFrm = object.form;
                var objRow = document.getElementById('row'+index)

                // geef rij een kleur
                if (objRow)
                {
                    if (object.checked)
                    {
                        objRow.style.backgroundColor = '#b3ccd3';
                    }
                    else
                    {
                        objRow.style.backgroundColor = '';
                    }
                }


                orh_calculate(objFrm);
            }

            function orh_calculate(objFrm)
            {
                var intTotalStartPrice = 0;

                // totale start prijs
                for (var i = 0; i < objFrm.elements['teltprod'].length; i++)
                {
                    
                    if (objFrm.elements['startprico'][i].checked)
                    {
                        intTotalStartPrice += parseFloat(objFrm.elements['startprice'][i].value);

                    }
                }

                // voeg extra toe
                intTotalStartPrice += parseFloat(objFrm.elements['extraprice1'].value);

                // ff afronden
                intTotalStartPrice = round(intTotalStartPrice);

                // vul de tussenresultaat velden
                objFrm.elements['totalstartprice'].value = intTotalStartPrice;
            }

            function extra(objFrm,count)
            {
                var objRow = document.getElementById('row');
                if (count>0)
                {
                    objRow.style.backgroundColor = '#b3ccd3';
                }
                else
                {
                    objRow.style.backgroundColor = '';
                }
                
                objFrm.elements['extraprice1'].value = round(parseFloat(objFrm.elements['extraprice'].value) * count);

                orh_calculate(objFrm);
            }

        </script>
    </head>
    <body>
        <form name="frmPricelist" action="#" method="post">

            <table style="border-collapse: collapse;" border="1" width="600">
                <tr>
                    <td>Producten</td>
                    <td>&nbsp;</td>
                    <td align="right"><b>Bedrag</b></td>
                    <td>&nbsp;</td>
                </tr>
                <tr id="row1">
                    <td>
                        <input name="startprico1" value="102.64" onclick="orh_select(1,this);" type="checkbox">
                        <input name="startprice1" value="102.64" type="hidden">
                        <input name="teltprod" value=0 type=hidden>
                    </td>
                    <td>&nbsp;Product 1</td>
                    <td>&nbsp;</td>
                    <td>&#8364; 102,64</td>
                </tr>
                <tr id="row2">
                    <td>
                        <input name="startprico2" value="103.64" onclick="orh_select(2,this);" type="checkbox">
                        <input name="startprice2" value="103.64" type="hidden">
                        <input name="teltprod" value=0 type=hidden>
                    </td>
                    <td>&nbsp;Product 2</td>
                    <td>&nbsp;</td>
                    <td>&#8364; 103,64</td>
                </tr>
                <tr id="row3">
                    <td>
                        <input name="startprico3" value="34.64" onclick="orh_select(3,this);" type="checkbox">
                        <input name="startprice3" value="34.64" type="hidden">
                        <input name="teltprod" value=0 type=hidden>
                    </td>
                    <td>&nbsp;Product 3</td>
                    <td>&nbsp;</td>
                    <td>&#8364; 34,64</td>
                </tr>
                <tr id="row">
                    <td>
                        <select name="cboExtra" onchange="extra(this.form,this.options[this.selectedIndex].value)">
                            <option value="0">0</option>
                            <option value="1">1</option>
                            <option value="2">2</option>
                            <option value="3">3</option>
                            <option value="4">4</option>
                            <option value="5">5</option>
                            <option value="6">6</option>
                            <option value="7">7</option>
                            <option value="8">8</option>
                            <option value="9">9</option>
                            <option value="10">10</option>
                        </select>
                    </td>
                    <td>&nbsp;Product 6</td>
                    <td>&nbsp;<input name="extraprice" value="35.95" type="hidden"></td>
                    <td>&#8364;&nbsp;<input name="extraprice1" value="0" type="input"></td>
                </tr>
                <tr>
                    <td>&nbsp;Totaal:</td>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                    <td>&#8364;&nbsp;<input name="totalstartprice" type="input"></td>
                </tr>
            </table>
            <input type=text name=boodschap size=30>
        </form>
    </body>
</html>


Misschien pak ik het wel helemaal verkeerd aan. Als dit probleem verholpen is moet het script er ook op voorbereid zijn dat een lijst meerdere producten kunnen bevatten waar de klant een aantal kan kiezen.

Dit is hier te bekijken.

Edit 8:37 uur:

Waarom kan ik nu niet gewoon een element pakken door er machinaal een nummer achter te gooien:

(regel 9 en 11 in onderstaande code)

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
function orh_calculate(objFrm)
{
                var intTotalStartPrice = 0;

                // totale start prijs
                for (var i = 0; i < objFrm.elements['teltprod'].length; i++)
                {
                    
                    if (objFrm.elements['startprico'+i].checked)
                    {
                        intTotalStartPrice += parseFloat(objFrm.elements['startprice'+i].value);

                    }
                }

                // voeg extra toe
                intTotalStartPrice += parseFloat(objFrm.elements['extraprice1'].value);

                // ff afronden
                intTotalStartPrice = round(intTotalStartPrice);

                // vul de tussenresultaat velden
                objFrm.elements['totalstartprice'].value = intTotalStartPrice;
            }


Edit 8:57:

Vreemd dit gaat ook niet:

JavaScript:
1
2
3
4
5
6
var gogogo = 'startprico'+i;
alert (gogogo);
            
if (objFrm.elements[gogogo].checked) {
    alert("goed gegaan");
}


Edit 9:56:

Nope dat gaat dus helemaal niet lukken. Ik had gedacht om met php gewoon elk record uit de database een name "product001" etc mee te geven en die vervolgens één voor één uit automatisch uit te lezen met javascript als javascript eerst kijkt hoeveel input velden er zijn (die er puur staat om het aantal producten te meten), om vervolgens dit aantal te gebruiken om ze te lezen.

Ik krijg het echter met geen mogelijkheid voor elkaar om dat "gogogo" stukje hierboven een dynamische naam te geven. Het is wel mogelijk zie ik met behulp van de search om een objectnaam een dynamische naam te geven, maar dat is nu net niet de bedoeling.

Tips zijn welkom :)

Edit 11:20 uur:

Tis hier lekker rustig... geloof dat iedereen nog op een oor ligt :).

Ben weer even bezig geweest, maar kom echt helemaal niks verder. Ik heb geprobeerd om met een veld met een andere naam deze in eerste instantie eens proberen aan te vinken. Maar dit ging niet, het object bestond niet. Nu ben ik aan het kijken waar dat aan zou kunnen liggen, maar kom ook niet veel verder. In onderstaande code heb ik een extra input veld toegevoegd met naam "ap" en de hidden is "ap1". Nu zit er een alert in die zodra er op een checkbox geklikt wordt hij de hoeveelheid velden met name="ap" moet weergeven. Met "startprice" geeft hij netjes 3 aan, maar bij "ap" krijg ik undifined. Hoe kan dat nu? Hij bestaat toch? (test staat op regel 42)

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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
<html>
    <head>
        <title>whatever</title>
        <script type="text/javascript">
            
            function round(number,X)
            {
                // rounds number to X decimal places, defaults to 2
                X = (!X ? 2 : X);
                return Math.round(number*Math.pow(10,X))/Math.pow(10,X);
            }

            function orh_select(index,object)
            {
                var objFrm = object.form;
                var objRow = document.getElementById('row'+index)

                // geef rij een kleur
                if (objRow)
                {
                    if (object.checked)
                    {
                        objRow.style.backgroundColor = '#b3ccd3';
                    }
                    else
                    {
                        objRow.style.backgroundColor = '';
                    }
                }


                orh_calculate(objFrm);
            }

            

            function orh_calculate(objFrm)
            {
                var intTotalStartPrice = 0;

                // TEST OM TE KIJKEN OF WE DE AP ZIEN
                var bla = objFrm.elements['ap'].length;
                alert(bla);





                // totale start prijs
                for (var i = 0; i < objFrm.elements['startprice'].length; i++)
                {
                    if (objFrm.elements['startprice'][i].checked)
                    {
                        intTotalStartPrice += parseFloat(objFrm.elements['startprice'][i].value);

                    }
                }




                for (var i = 0; i < objFrm.elements['ap'].length; i++)
                {
                    if (objFrm.elements['ap'][i].checked)
                    {
                        intTotalStartPrice += parseFloat(objFrm.elements['ap'][i].value);

                    }
                }



                // voeg extra toe
                intTotalStartPrice += parseFloat(objFrm.elements['extraprice1'].value);

                // ff afronden
                intTotalStartPrice = round(intTotalStartPrice);

                // vul de tussenresultaat velden
                objFrm.elements['totalstartprice'].value = intTotalStartPrice;
            }

            function extra(objFrm,count)
            {
                var objRow = document.getElementById('row');
                if (count>0)
                {
                    objRow.style.backgroundColor = '#b3ccd3';
                }
                else
                {
                    objRow.style.backgroundColor = '';
                }
                
                objFrm.elements['extraprice1'].value = round(parseFloat(objFrm.elements['extraprice'].value) * count);

                orh_calculate(objFrm);
            }

        </script>
    </head>
    <body>
        <form name="formie" action="#" method="post">
            <table style="border-collapse: collapse;" border="1" width="600">
                <tr>
                    <td>Producten</td>
                    <td>&nbsp;</td>
                    <td align="right"><b>Bedrag</b></td>
                    <td>&nbsp;</td>
                </tr>
                <tr id="row1">
                    <td>
                        <input name="startprice" value="102.64" onclick="orh_select(1,this);" type="checkbox">
                        <input name="startprice1" value="102.64" type="hidden">
                    </td>
                    <td>&nbsp;Product 1</td>
                    <td>&nbsp;</td>
                    <td>&#8364; 102,64</td>
                </tr>
                <tr id="row2">
                    <td>
                        <input name="startprice" value="103.64" onclick="orh_select(2,this);" type="checkbox">
                        <input name="startprice2" value="103.64" type="hidden">
                    </td>
                    <td>&nbsp;Product 2</td>
                    <td>&nbsp;</td>
                    <td>&#8364; 103,64</td>
                </tr>
                <tr id="row3">
                    <td>
                        <input name="startprice" value="34.64" onclick="orh_select(3,this);" type="checkbox">
                        <input name="startprice3" value="34.64" type="hidden">
                    </td>
                    <td>&nbsp;Product 3</td>
                    <td>&nbsp;</td>
                    <td>&#8364; 34,64</td>
                </tr>
                <tr id="row">
                    <td>
                        <select name="cboExtra" onchange="extra(this.form,this.options[this.selectedIndex].value)">
                            <option value="0">0</option>
                            <option value="1">1</option>
                            <option value="2">2</option>
                            <option value="3">3</option>
                            <option value="4">4</option>
                            <option value="5">5</option>
                            <option value="6">6</option>
                            <option value="7">7</option>
                            <option value="8">8</option>
                            <option value="9">9</option>
                            <option value="10">10</option>
                        </select>
                    </td>
                    <td>&nbsp;Product 6</td>
                    <td>&nbsp;<input name="extraprice" value="35.95" type="hidden"></td>
                    <td>&#8364;&nbsp;<input name="extraprice1" value="0" type="input"></td>
                </tr>
                <tr id="row4">
                    <td>
                        <input name="ap" value="34.64" onclick="orh_select(4,this);" type="checkbox">
                        <input name="ap1" value="34.64" type="hidden">
                    </td>
                    <td>&nbsp;apk</td>
                    <td>&nbsp;</td>
                    <td>&#8364; 34,64</td>
                </tr>
                <tr>
                    <td>&nbsp;Totaal:</td>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                    <td>&#8364;&nbsp;<input name="totalstartprice" type="input"></td>
                </tr>
            </table>
            <input type=text name=boodschap size=30>
        </form>
    </body>
</html>

[ Voor 178% gewijzigd door Gerwin op 24-04-2005 11:26 ]

Station van Gerwin Prins op Apple Music


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

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

            function check(objFrm)
            {
                var bla = objFrm.elements['test1'];
                if (bla)
                {
                    if (bla.length) alert('test1 bestaat en heeft een length property');
                    else alert('test1 bestaat maar heeft geen length property');
                }

                bla = objFrm.elements['test2'];
                if (bla)
                {
                    if (bla.length) alert('test2 bestaat en heeft een length property');
                    else alert('test2 bestaat maar heeft geen length property');
                }
            }

        </script>
    </head>
    <body>
        <form name="frmPricelist" action="#" method="post">
            <input name="test1" type="checkbox"><br>

            <input name="test2" type="checkbox"><br>
            <input name="test2" type="checkbox"><br>

            <input type="button" value="check" onclick="check(this.form)">
        </form>
    </body>
</html>

Kortom: als er van een element maar 1 instantie bestaat dan heeft hij geen length property en kan je hem dus niet als een array benaderen.

Intentionally left blank


  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06-2025

Gerwin

Ik ben er klaar voor!

Topicstarter
Ok. Ik moet dus zorgen dat er meerdere instanties heb bij een object. :) Dacht dat de length gewoon op 0 stond in dat geval. Zijn er oook nog meer mogelijkheden om iets aan te vinken in een lijst dat allemaal dezelfde name="blaat" heeft?

Station van Gerwin Prins op Apple Music


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Gerwin schreef op zondag 24 april 2005 @ 20:34:
Ok. Ik moet dus zorgen dat er meerdere instanties heb bij een object. :)
uh, nee; je moet er alleen rekening mee houden dat er ook maar 1 instantie kan zijn.
Dacht dat de length gewoon op 0 stond in dat geval.
Nee, als er maar 1 instantie bestaat dan bestaat de hele length property gewoon niet, en daar is prima op te checken ;)

Intentionally left blank


  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06-2025

Gerwin

Ik ben er klaar voor!

Topicstarter
Ok, maar als ik zoals in mijn eerste voorbeeld een lijst heb met allemaal producten die allemaal opgeteld worden omdat ze dezelfde instanties hebben. Hoe kan ik dan als de bezoeker bepaalde dingen aanvinkt zorgen dat bij bepaalde checkboxes of selecties andere delen van het formulier automatisch aangevinkt worden en dat hij kortingen berekend?

Ik heb dus bijvoorbeeld:

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
                <tr id="row1">
                    <td>
                        <input name="startprice" value="102.64" onclick="orh_select(1,this);" type="checkbox">
                        <input name="startprice1" value="102.64" type="hidden">
                    </td>
                    <td>&nbsp;Product 1</td>
                    <td>&nbsp;</td>
                    <td>&#8364; 102,64</td>
                </tr>
                <tr id="row2">
                    <td>
                        <input name="startprice" value="103.64" onclick="orh_select(2,this);" type="checkbox">
                        <input name="startprice2" value="103.64" type="hidden">
                    </td>
                    <td>&nbsp;Product 2</td>
                    <td>&nbsp;</td>
                    <td>&#8364; 103,64</td>
                </tr>
                <tr id="row3">
                    <td>
                        <input name="startprice" value="34.64" onclick="orh_select(3,this);" type="checkbox">
                        <input name="startprice3" value="34.64" type="hidden">
                    </td>
                    <td>&nbsp;Product 3</td>
                    <td>&nbsp;</td>
                    <td>&#8364; 34,64</td>
                </tr>


Nu telt bij zegmaar alles op. Maar hoe kan ik nu zorgen dat als ik checkbox 1 aanvink hij automatisch checkbox 3 ook aanvinkt? Ik heb immers geen unieke naam gegeven maar allemaal dezelfde.

Ik heb getracht met een extra hidden box die enkel als doel heeft om te kijken hoeveel productener zijn hem samen te stellen , maar kan vervolgens niet met javascript met een loop alle name="startprice#" doorlopen.

Dit doet ik dan met:

code:
1
2
3
4
5
6
7
8
9
10
                // totale start prijs
                for (var i = 0; i < objFrm.elements['teltprod'].length; i++)
                {
                    seleco = 'startprico'+i; 
                    if (objFrm.startprico+i.checked)
                    {
                        intTotalStartPrice += parseFloat(objFrm.elements['startprico'][i].value);

                    }
                }

[ Voor 29% gewijzigd door Gerwin op 25-04-2005 18:33 ]

Station van Gerwin Prins op Apple Music


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Naamgeving doet een hoop ;)
JavaScript:
1
2
3
4
5
6
var i = 1, seleco, intTotalStartPrice = 0;
while ((seleco = objFrm.elements['startprice'+i]) != null)
{
    if (seleco.checked) intTotalStartPrice += parseFloat(seleco.value);
    i++;
}


Maar goed, dat is er vanuitgaande dat je zoiets hebt:
HTML:
1
2
3
4
<input name="startprice1" value="102.64" type="checkbox">
<input name="startprice2" value="12.64" type="checkbox">
<input name="startprice3" value="2.64" type="checkbox">
<input name="startprice4" value="0.64" type="checkbox">

en de vraag is of dat uiteindelijk ook de bedoeling is... Het nog apart bijhouden van de prijzen in hidden vars lijkt me in ieder geval overbodig.

Als er bij bepaalde checkboxen ook nog extra acties moeten worden uitgevoerd dan zal je eerst een manier moeten verzinnen hoe je dat logisch oplost.
Overigens kan je naast een name-attribuut ook eventueel nog een id-attribuut gebruiken om een element uniek aan te duiden ;)

[ Voor 74% gewijzigd door crisp op 25-04-2005 23:15 ]

Intentionally left blank


  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06-2025

Gerwin

Ik ben er klaar voor!

Topicstarter
Het is de bedoeling dat er op het moment dat de bezoeker bepaalde opties aanvinkt op het formulier een javascript automatisch andere dingen aanvinkt en waar nodig kortingen berekend voor dergelijke opties die dan aangevinkt worden. Zodra de bezoeker vervolgens de optie weer uitvinkt dan moet uiteraard alles weer afgetrokken worden van het totaal.

Op voorhand weet ik dat er mogelijk een aantal dingen zullen zijn. Ik verdeel het formulier onder in verschillende secties met verschillende soorten producten. Nu moet bijvoorbeeld het volgende mogelijk zijn en steeds moet alles opgeteld worden en in een totaalbedrag weergegeven worden.

- Kies product 1, krijg automatisch product 10 gratis, 11 wordt bijgeteld, 12 ook bijgeteld. Producten moeten allemaal natuurlijk wel afzonderlijk weer uitgevinkt worden kunnen, waarnaar die korting natuurlijk niet meer geld.

- Kies product 5 krijg je automatisch 6 erbij (combi).

- Kies je product 8 dan krijg je 9 of 10 voor 50% erbij (maar die hoeft natuurlijk niet)

Nu is mijn situatie dat ik er iets op moet verzinnen zodat een scriptje de juiste producten korting kan berekenen (als die producten ook beschikbaar zijn in dat formulier). Ik heb gedacht gewoon PHP elk product een name="naam" mee te geven om vervolgens een groot javascript bestand te schrijven die vervolgens berekend of er bepaalde combi's bestaan en of het script automatisch dingen moet gaan zitten uitrekenen. Dus dan per checkbox click een function aanroepen die dingen doet dat geld voor dat artikel. Dus klikt men naam="tralala" dan doet hij automatisch function tralala() en gaat hij kortingen berekenen mochten bepaalde producten in het formulier staan.

Probleem is dat ik dus geen namen heb gegeven aan de producten nu. Dit omdat ik anders niet alle producten kan optelen bij elkaar. Het voorbeeld wat je geeft CRISP is leuk ik ga eens kijken of dat werkt. Het is me vooralsnog niet gelukt een name element naam door javascript te laten samenstellen. Wat gebeurt er in dat voorbeeld van je als nu een startprice niet bestaat?

Station van Gerwin Prins op Apple Music

Pagina: 1