Er igang med at lave et beregnings program. Alt bliver hentet fra DB via PHP. Kunden vælger et produkt som derefter henter en pris som er "grundprisen". Herefter skal man kunne vælge extra udstyr via. checkbox. Dette skal igen opdaterer den samlede pris. Slår man igen boxen fra skal dette jo så igen trækkes fra totalprisen.
Totalprisen ska jeg gerne kunne hive ud af scriptet så den kan blive gemt med sessiondata i PHP.
Jeg har absolut INGEN større forstand på JS og håber at der findes nogle kyndige herinde der har lyst til at hjælpe. :)
nu ved jeg ikke præcis hvilke varer det drejer sig om eller hvordan din nuværende form ser ud, men hvis det nu var biler det drejede sig om kunne dette nok være tilstrækkeligt: <script type="text/javascript"> var price = 0; var currency = " kr."; function changePrice(outputElm,addPrice) { price += addPrice; outputElm.value = price+currency; } function convertPriceString(str) { return Number(str.substr(str.lastIndexOf("_")+1)); } </script>
Som du måske kan se ud fra html-koden, så skrives beløbet til sidst i value-attributen. Den kan derfor enten stå alene, som nede ved checkboxene, eller stå efter det sidste underscore, som oppe i select-boksen. Om du vil benytte denne funktion med at skrive en tekst før prisen (som opel_kadett_50000) ved jeg ikke, og hvis du ikke gør det kunne det laves en anelse lettere. Men det er til at overse.
Pt. har jeg følgende spørgsmål. 1) Hvordan kan man få den til at start med at skrive et beløb, altså f.eks. 0 kr inden man vælger extra udstyr. (Jeg har slettet det med at vælge bil, da det ikke er nødvendigt).
2) Hvordan kan jeg lave output uden at det bliver i en input boks, og hvordan kan jeg lave dette sådan at jeg kan få beløbet + valgte extra udstyr ud ved at klikke videre til bestilling?
Jeg tror umiddelbart dette vil kunne gøre det: <script type="text/javascript"> var price = 0; var currency = " kr."; var outputId = "pris_ialt"; function changePrice(outputElm,addPrice) { price += addPrice; outputElm.value = price; document.getElementById(outputId).innerHTML = price+currency; } function convertPriceString(str) { return Number(str.substr(str.lastIndexOf("_")+1)); } </script> </head> <body onload="changePrice(document.form1.samlet_pris,0);"> <form name="form1"> <br> Servostyring: <input type="checkbox" name="servostyring" value="3000" onclick="p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br> Rat: <input type="checkbox" name="rat" value="10" onclick="p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br> Dyre dæk: <input type="checkbox" name="dyre_daek" value="10000" onclick="p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br> Raketmotor: <input type="checkbox" name="raketmotor" value="5" onclick="p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br> <hr> Samlet pris: <span id="pris_ialt"></span><input type="hidden" name="samlet_pris">
</form> </body>
1) Her kan du starte med at skrive <body onload="changePrice(document.form1.samlet_pris,0);"> hvor 0-tallet kan udskiftes med startbeløbet eller evt. <body onload="changePrice(document.form1.samlet_pris,price);"> hvor du så istedet for kan ændre price-variablen fra starten af (evt. via serverside som php/asp) til at være startprisen.
2) Her har jeg lavet en enkel lille variabel som hedder var outputId = "pris_ialt"; Denne henviser så til id'en på det output-element du gerne vil have: Samlet pris: <span id="pris_ialt"></span><input type="hidden" name="samlet_pris">
Læg mærke til at det som førhen var input-boksen er nu blevet en hidden boks. Dvs. at du ved at klikke videre til bestilling (via en submit-boks formoder jeg) får den samlede pris med samt ekstra-udstyret. Du får ved submit til en anden side også oplysningerne med om hvilke ekstraudstyr der er valgt.
Hvis du prøver at submitte og på den side du submitter til skriver: <?php print_r($_POST); ?> Så kan du se strukturen af det data, som bliver sendt videre. (Jeg antager du bruger PHP - hvilket jo tit passer meget godt sammen med MySQL).
Her kan du se at det kun er de checkboxe, som er valgt, der bliver sendt videre, så du kan evt. gennemløbe $_POST-arrayet og hente informationerne ud om hvilke ekstraudstyr, der er valgt.
En anden metode er at lave et enkelt hidden-felt til: <input type="hidden" name="samlet_pris"><input type="hidden" name="ekstraudstyrsListe"> og tilføje disse to funktioner: var eUdstyr = {} function ekstraudstyr(chkBox) { eUdstyr[chkBox.name] = chkBox.checked; } function submitEkstraudstyr(outputElm) { for (i in eUdstyr) { outputElm.value += (eUdstyr[i]) ? i+"," : ""; } outputElm.value = outputElm.value.substring(0,outputElm.value.length-1); return true; }
Den første skal kaldes ved hver enkel checkbox: Servostyring: <input type="checkbox" name="servostyring" value="3000" onclick="ekstraudstyr(this);p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br> Rat: <input type="checkbox" name="rat" value="10" onclick="ekstraudstyr(this);p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br> Dyre dæk: <input type="checkbox" name="dyre_daek" value="10000" onclick="ekstraudstyr(this);p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br> Raketmotor: <input type="checkbox" name="raketmotor" value="5" onclick="ekstraudstyr(this);p = convertPriceString(this.value);changePrice(this.form.samlet_pris,((this.checked) ? p : -p));"><br>
og den sidste skal kaldes oppe i selve form-elementet: <form name="form1" action="etSted.php" method="post" onsubmit="return submitEkstraudstyr(this.ekstraudstyrsListe);">
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.