Problem z formularzem - zliczanie cen i wysyłanie danych


(1q2w3e4r) #1

Witam,

Mam taki formularz, który zlicza zaznaczone wartości:

http://xdd.pl/auto-update-cart/test5/

Mam następujące problemy i nie wiem jak je rozwiązać:

  • nie zlicza wartości po przecinku 2.99 tylko 2

  • po wysłaniu formularza nie wysyła ceny (total), która została zliczona po zaznaczeniu wszystkich opcji

  • po zaznaczeniu elementów typu radio wysyła w value="" tylko cenę. Niestety cena nic nie sugeruje dlatego przydało by się żeby wysyłało cenę + nazwę danej opcji ale nie wiem jak to rozwiązać

Bardzo proszę o pomoc.


(Pablo_Wawa) #2
  1. W pliku js/form.js w funkcji calcTotal() masz wywołanie total += parseInt(…) - zamień je na total += parseFloat(…).

  2. Bo tego pola wcale nie ma w formularzu - jest on wstawiany dynamicznie przez kod we wspomnianym pliku js/forms.js - jeśli chcesz mieć tę wartość (wysyłaną przez formularz), musisz sobie dodać jakieś dodatkowe (ukryte: type=“hidden”) pole w formularzu i tam przepisywać obliczoną wartość - należy to robić w funkcji updateTotal().

  3. Formularz wysyła pola o nazwie value, więc możesz w nich dodać dodatkowe dane, prócz samej ceny - która i tak jest podawana użytkownikowi w osobnym polu label (wraz z pełnym opisem danej opcji).

Uwaga: nie należy polegać na polu z pkt. 2, bo złośliwy użytkownik może je przed wysłaniem zmodyfikować na wartość niższą - sugeruję jej dodatkowe obliczanie po stronie skryptu na serwerze.


(1q2w3e4r) #3

Dzięki. Rozwiązałem dwa pierwsze problemy.

Zostałem z problemem nr 3. W value musi być cena ponieważ ceny musi zliczać na żywo więc jak tam dodać dodatkowe dane, np. nazwę? Formularz wysyła tak jak pisałeś tylko value.

Dzięki za ostrzeżenie. Będę to sprawdzał dodatkowo na serwerze.


(Pablo_Wawa) #4

A jak w polach value po wartości (cenie) zrobisz spację i wpiszesz jakiś tekst, to parseFloat() zignoruje to co nie jest liczbą (po spacji) - to takie ciekawe zachowanie tych dwóch funkcji parse - i do obliczeń użyjesz właściwych wartości, a formularz i tak wyśle całe pole value z opisem po cenie:

value=“99.97 jakiś opis”

value=“99.97 basic package”

A w skrypcie po stronie serwera obetniesz sobie prefiks z ceną i otrzymasz dalszy opis (a propos ceny to patrz uwaga jak wcześniej).