Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS][jquery] Obliczenia na polach input. Obsługa wpisu ,500 ?
Forum PHP.pl > Forum > Przedszkole
starterrrrr
Witam.
Wykonałem prosty kalkulator pół typu input w jQuery.

Problemem jest to, że zwraca mi NaN gdy wpisze się ,500. Macie pomysł na fachową zamiane tego na 0,500. Myślałem, że parseFloat() załatwi sprawę.

Jak można jeszcze zabezpieczyć, często mam problem z poprawnymi obliczeniami na polach input.


  1. <script>
  2. //przeliczanie wpisanej wartości - wartosc x ilosc
  3. $( document ).on( "input", "#pole_ilosc", function() {
  4.  
  5. przelicz_sume_produktu( $(this).val() );
  6.  
  7. });
  8.  
  9. function przelicz_sume_produktu( element ) {
  10.  
  11. var ilosc = parseFloat( element );
  12. var cena = parseFloat( $("#pole_wartosc").val() );
  13.  
  14. var wynik = round(ilosc * cena, 2);
  15.  
  16. if (ilosc != 1) {
  17. //może dac warunbek, że if wynik=Nan wtedy info "Zła ilość"
  18. alert( wynik );
  19. }
  20.  
  21. }
  22.  
  23. function round(number,x) {
  24. var x = (!x ? 2 : x);
  25. return Math.round(number*Math.pow(10,x)) / Math.pow(10,x);
  26. }
  27.  
  28.  
  29. //zabezpieczenie pola ilosc i wartosc. przecinek na kropke i sprawdza czy nie ujemna wartosc. można by jeszcze to rozbudowac ododatkową walidacje np przypadku ,500 .
  30.  
  31. $( document ).on( "input", ".prod_ilosc", function() {
  32.  
  33. this.value=this.value.replace(',','.');
  34.  
  35. if($(this).val() < 0) {
  36. alert('Podaj wartość dodatnią.');
  37. $(this).val(0);
  38. }
  39.  
  40. });
  41. </script>
markuz
W linijce 32 możesz wstawić:
Kod
if (this.value.indexOf(',') === 0) {
   this.value = '0' + this.value;
}


@trueblue Dał lepsza odpowiedź, moją zignoruj
trueblue
Kod
parseFloat(wartosc.replace(',' ,'.'))
starterrrrr
Cytat(trueblue @ 14.03.2018, 12:04:45 ) *
Kod
parseFloat(wartosc.replace(',' ,'.'))



W całym tym moim kodzie dane przechodzą przeztakie funkcje.
Linia 33 kasuje przecinki, linia 11 i 12 jest parse float.

parsefloat() nie zamieni zmienną .500 na 0.500
trueblue
Do obliczeń nie jest potrzebne 0, do prezentacji po prostu dodaj jeśli go brak.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.