Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Sumowanie wartości
Forum PHP.pl > Forum > Przedszkole
shpaque
Witam serdecznie. Piszę skrypt zamówienia pieczątek (http://smusic.nazwa.pl/_test/mip/) i teraz o co mi chodzi. Np wielkość pieczątek ma swój value widoczny na buttonie, jak zrobić na końcu żeby przypisywał dla każdego value jakąś cenę (np if - tutaj nie wime get element by - = 24x10, cena = 10)

może inaczej.

buttony z wielkością polimerów (to radio buttons o wspólnej nazwie "wielkosc")
buttony również radio z rodzajem automatu

  1. <span style="color:#FFFFFF;font-family:'Trebuchet MS';font-size:25px;" id="fullcena">
  2. <script type="text/javascript">
  3. function cena()
  4. {
  5. var cenawielkosc = tutaj value z radio o nazwie "wielkosc";
  6. var cenaautomat = itd;
  7. var cenawysylka = itd;
  8. var cenacalosc = cenawielkosc + cenaautomat + cenawysylka;
  9.  
  10. var fullcena = document.getElementById('fullcena');
  11. fullcena.innerHTML = "Cena brutto: " + cenacalosc;
  12. }
  13. cena();
  14. </script>
  15. </span>


jak przypisać do nich odpowiednie kwoty i później je zsumować i wyświetlić cenę?
aniolekx
cenę do tych buttonów dodał bym w czasie generowanie skryptu po stronie serwera, do jakiegokolwiek atrybutu który jQuery możne wyłuskać, a później po stronie klienta do zdarzenia kliknięcia w button, które i tak już masz zaimplementowane, dodajesz dodatkowy kod który bierze wyłuskaną cenę elementu i dodaje ja do ceny głównej.

tutaj musisz się zastanowić jaki algorytm chcesz wykorzystać, bo jeżeli elementów wpływających na cenę jest więcej niż 1 to przykładowo po każdej zmianie jednego elementu będziesz musiał sprawdzić wszystkie zaznaczone elementy, które wpływają na cenę, i do zapisanej gdzieś ceny bazowej dodać je wszystkie.
druga opcja to ewentualne w ramach danego bloku zapisanie wartości jaka ostatnio dodałeś, i jeżeli w ramach tego bloku nastąpi kolejna zmiana odjecie poprzedniej wartości i dodanie nowej.

Pamiętaj aby po wysłaniu formularza do każdego zaznaczonego elementu przypisać cenę jeszcze raz, abyś nie polegał na cenach wysłanych z formularza, bo to jest niebezpieczne.
shpaque
chciałbym na końcu zrobić coś takiego:

  1. <span style="color:#FFFFFF;font-family:'Trebuchet MS';font-size:25px;" id="fullcena">
  2. <script type="text/javascript">
  3. function cena()
  4. {
  5. var cenawielkosc = document.getElementsByName('wielkosc').value;
  6. if cenawielkosc == 26x10 {cena1 = 10;}
  7. if cenawielkosc == 38x14 {cena1 = 20;} - to tylko przyklad tego co chcialbym osiagnac
  8.  
  9. var cenaautomat = document.getElementsByName('model').value;
  10. if - tu analogicznie (powiedzmy że if model == ewetwyu {cena2 = 14;}
  11.  
  12. var cenawysylka = document.getElementsByName('odbior').value;
  13. i tu również
  14.  
  15. var cenacalosc = cena1 + cena2 + cena3;
  16.  
  17. var fullcena = document.getElementById('fullcena');
  18. fullcena.innerHTML = "Cena brutto: " + cenacalosc;
  19. }
  20. cena();
  21. </script>
  22. </span>



generalnie chodzi o to przede wszystkim:
- jak pobrać wartość zaznaczonego radio buttona (jego value)
i później jak w najprostszy sposób zrobić warunki...
nospor
Tym kodem pobierasz value zaznaczonego radio:
var val = jQuery("input[name=wielkosc]:checked").val();
Potem tylko prosty IF na cene. Zadna filozofia.

Masz jednak jakis blad, bo klikanie w buttony nie zaznacza odpwiednich radio. Ciągle jest zaznaczone pierwsze radio niezaleznie w co sie kliknie. Musisz wpierw poprawic to.
shpaque
no właśnie tylko cholera dlaczego...

  1. <span style="color:#FFFFFF;font-family:'Trebuchet MS';font-size:25px;" id="fullcena">
  2. <script type="text/javascript">
  3. function cena()
  4. {
  5. var cenawielkosc = jQuery("input[name=wielkosc]:checked").val();
  6. var cenaautomat = jQuery("input[name=model]:checked").val();
  7. var cenawysylka = jQuery("input[name=odbior]:checked").val();
  8. var cenacalosc = cenawielkosc + cenaautomat + cenawysylka;
  9.  
  10. var fullcena = document.getElementById('fullcena');
  11. fullcena.innerHTML = "Cena brutto: " + cenacalosc;
  12. }
  13. cena();
  14. </script>
  15. </span>


teraz wyświetla mi wszystkie dane value jak trzeba, jednak po przerzuceniu radio na inny value - nic się nie zmienia...
nospor
Cytat
jednak po przerzuceniu radio na inny value - nic się nie zmienia...
No tak jak pisalem: klikanie w buttony nie zmienia u Ciebie radio.
shpaque
znaczy inaczej - pozycja buttona się zmienia - tzn "parkuje" tam gdzie kliknę, tylko ta wartość na dole w cenie - nie...
nospor
Rety.... przeciez ci tlumacze. Klikajac na button nie zmienia checked dla danego radio. Czy ja po chinsku pisze??

Juz doszedlem czemu ci sie nie zmienia. Bo dla kazdego radio dales zdarzenie onclick, na koncu ktorego dales RETURN FALSE;. I to jest twoj problem. Wywal te RETURN FALSE;
shpaque
wywaliłem - to nie to...

może zamiast jQuery dałbyś mi żywy JS wpis wyciągający value?
nospor
Przeciez dziala poprawnie..... Wpisuje
jQuery("input[name=wielkosc]:checked").val()
i zwraca mi poprawną wartosc akutalnie zaznaczonego rozmiaru.

A nie zmienia ci ceny u Ciebie, bo nigdzie nie widze bys podpial zmiane ceny na klikanie buttona....

Z tego co widze to cena() wywolujesz tylko raz po zaladowaniu strony. NIby jakim cudem ma ci sie cena zmieniac skoro odpalasz to tylko i wylacznie raz po zaladowaniu strony? Nie sadzisz ze zmiane ceny trzeba dodac do zmiany radio? Tak jak dodales zmiany prostokata?
shpaque
nie rozumiem.

cenę chcę wyliczyć w tym skrypcie dopiero (z warunkami), ale mimo wywalenia return false; nie zmienia mi value'sów na bieżąco w tej funkcji...

co to ma do ceny, skoro cen jeszcze nie podałem...

może masz to co ci działa w jakimś jsfiddle?
nospor
Gdy klikniesz na zmiane rozmiaru to chcesz w tym momencie wyswietlic inna cene?
shpaque
mogło by tak być, ale skoro na dole strony na bieżąco i tak nie pobiera valuesów to jak ma pobrac jakas cene ktora dodam w 'onfocus'?
nospor
Cytat
ale skoro na dole strony na bieżąco i tak nie pobiera valuesów
A niby jakim cudem ma ci na biezaca cos wyswietlac skoro ty tego na biezaca nie wywoluesz?questionmark.gifquestionmark.gifquestionmark.gif? Myslisz ze w magiczny sposob funkcja cena() sama sie wywola?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif?
shpaque
to inaczej.

KIEDY mam zdefiniować lub/i wywołać funkcję cena(), żeby na bieżąco pobierał mi valuesy przypisane do radio buttonów?
nospor
facepalmxd.gif
Toz juz ci pisalem milion razy...... cena() masz wywolywac w tym samym miejscu co wywolujesz zmiane prostokata po klinkieciu w rozmiar. Czemu nie czytasz co sie do Ciebie pisze?!
shpaque
wiesz, że jestem zielony w tym...

  1. onfocus="table.style.width='133px'; table.style.height='51px'; table2.style.width='133px'; table2.style.height='51px';cena();


tak ma to wyglądać?co mi da "cena()" w onfocus?
nospor
Cytat
co mi da "cena()" w onfocus?


Ty sie przestan glupio pytac. Ty to poprostu tam wstaw skoro nie ogarniasz tego co sie do Ciebie pisze. Skoro tego nie rozumiesz, to poptostu rób co każą. Moze jak zrobisz, i zobaczysz ze jednak dziala, to moze wkoncu zrozumiesz.
shpaque
ok dzięki to niby działa, chociaż nie wiem czemu z opóźnieniem (czyu chodzi o onfocus?) zobacz na buttony rodzaju automatu i wysyłki
nospor
Cytat
to niby działa, chociaż nie wiem czemu

Dobra, to moze inaczej. Powiedz mi prosze, w jakim celu w onfocus dajesz taki kod:
table.style.width='133px'; table.style.height='51px'; table2.style.width='133px'; table2.style.height='51px';
?
Sam to napisales, wiec podejrzewam jestes w stanie udzielic ma na to pytanie odpowiedz
shpaque
w celu takim, żeby zmienić rozmiar tabeli podglądu... ale to chyba nieaktualne pytanie...

jedno to to jak wyżej (w przypadku buttonów modelu automatu i rodzaju wysyłki jest opóźnioenie o jedno kliknięcie), ale zauważyłem drugi błąd - w przypadku wielkości pieczątki wszystko odbywa się ładnie na bieżąco, ale jeśli zaznaczę powiedzmy ostatni (największy) format, a pozniej wysylke kurierem - to rozmiar pieczątki wraca do stanu początkowego
nospor
Cytat
w celu takim, żeby zmienić rozmiar tabeli podglądu.
Brawo.
A jesli chesz zmienic wyswietlaną cene to musisz wywolac funkcje cena() ktora to wlasnie robi...


Nie ogarniam, jak mozna rozumiec, ze aby zmienic rozmiar tabeli, to trzeba wykonac kod na zmiane rozmiaru tabeli, ale jednoczesnie nie rozumiec, by zmienic wyswietlaną cene, to trzeba wykonac kod na zmiane wyswietlanej ceny. Jest to dla mnie niepojęte.....
shpaque
ok to już wiem, ale mamy dalej błędy w działaniu:

jedno to to jak wyżej (w przypadku buttonów modelu automatu i rodzaju wysyłki jest opóźnioenie o jedno kliknięcie), ale zauważyłem drugi błąd - w przypadku wielkości pieczątki wszystko odbywa się ładnie na bieżąco, ale jeśli zaznaczę powiedzmy ostatni (największy) format, a pozniej wysylke kurierem - to rozmiar pieczątki wraca do stanu początkowego
nospor
U mnie zadne opoznienie nie wystepuje. Testuje na FF i opera.

Moze zmien z onfocus na onchange. Widocznie twoja przegladarka w innym momencie lapie zdarzenie.

I wywal wkoncu te RETURN FALSE; .. ile razy mozna to samo pisac?
shpaque
chroma, safari i IE - mają z tym problem
nospor
Poprostu zrob co napisalem.
shpaque
onchange nie wrzuce bo nie mam w programie takiej opcji,
jesli chodzi o return false; wywaliłem - ale to żadnej róznicy nie robi zupełnie... Tak jak poprzednio pisałem... Może funkcja powinna być jednak zdefiniowana przed pierwszym wywołaniem?
nospor
Cytat
onchange nie wrzuce bo nie mam w programie takiej opcji,
Acha, czyli bedziesz pisal zle dzialajce skrypty tylko dlatego ze uzywasz badziewnego programu ktory tylko pozwala na onfocus..... coollll...... a moze poprostu zacznij uzywac zwyklego notatnika? On pozwala wpisac co sie chce.

Cytat
Może funkcja powinna być jednak zdefiniowana przed pierwszym wywołaniem?
Tak oczywiscie, na pewno zadziala. Ale jestes pewien ze program ci na to pozwoli?


A juz calkiem na powaznie: dalsze proby pomocy nie mają sensu. Nie dosc ze trzeba wszystko powtarzac po 5 razy, to na dodatek uzywasz jakiegos programu, ktory ogranicza prace. ALbo poprostu nie wiesz jak uzywac tego programu. Niewazne.

1) Zmien program, najlepiej na pierwszy lepszy darmowy edytor: notatnik, eclipse, lub cala masa innych.
2) Czytaj co sie do ciebie pisze.
Gdy spelnisz oba warunki, byc moze da sie cos z tym problememem jeszcze zrobic.

Od biedy mozna sie bawic w parametryzowanie funkcji i recznie ja odpalac z danym rozmiarem, ale to juz jak ktos inny ma ochote ci to tlumaczyc to niech to robi.
shpaque
nospor znów jest podobna sytuacja...

bardzo dziękuję Tobie za pomoc (dwukrotną w tym temacie), ale zauważ kilka rzeczy:

- powtarzanie "usuń return fals" nic nie da, bo nie nanosi to żadnych zmian w działaniu skryptu.
- coś musi być nie tak w samym działaniu funkcji, skoro inne (w onfocus) działają na bieżąco bez opóźnień (np zmiana iframe, zmiana wielkości okna podglądu_), a TYLKO bieżące wyświetlanie zaznaczonyhc buttonów się sypie... Może to nie jest ani wina wiecznego "return false" ani zmiany z onfocus na onchange - które wpisałem ręcznie i również bez zmian, tylko być może w działaniu jQuery?? Dlatego prosiłem o alternatywę żywego kodu JS dla
  1. jQuery("input[name=wielkosc]:checked").val();


przecież gołym okiem widać że tutaj błąd leży gdzieś indziej a nie z powodu dwóch wymienionych wyżej rzeczy...
nospor
Nie, i jeszcze raz nie. TO nie wina jQuery. Zrozum to wkoncu.

W onfocus tabela ci sie zmienia prawidlowo, bo wstawiasz rozmiary recznie, nie sa one zalezne od wartosci zaznaczonego radio
Cena ci sie opoznia, bo najpierw idzie focus, a dopiero potem zmienia ci sie zaznaczone radio. I to jest wina opoznienia a nie uzycie jQuery. Skoro sie nie znasz, to sie nie klocz w tej oczywistej sprawie. Ty nawet chciales zmieniac jQuery na czysty JS juz w momencie, gdy nie wywolywales cena() przy zmianie i uwazales ze to jest wina jQuery..... prosze cie....


Zamiast onchange, zamien na onclick. To programi ci powinien pozwolic zrobic. I wywal te RETURN FALSE; niewazne, czy to cos daje czy nie. Poprostu wywal
shpaque
onclick p[róbowałem - to na onclicku miałem problem, że kiedy ustawiłem wielkość inną niż początkowa, a później ustawiłem np rodzaj automatu, to wielkość wracała do stanu początkowego

to może zróbmy inaczej - skoro ręcznie działa dobrze zróbmy ręcznie już z gotową ceną - value musi zostać takie jak jest, to może dodać jakiś znacznik z gotową ceną, a fujnkcja tylko ją sobie zsumuje z zaznaczonych "onfocus" wartości... tylko jak dodać inny znacznik niż name,value,id ? Coś na zasadzie:

  1. <input type="radio" id="wielkosc1" onfocus="table.style.width='133px'; table.style.height='51px'; table2.style.width='133px'; table2.style.height='51px'; cena1='10';" name="wielkosc" value="26x10" checked="checked"><label style="width:100%;height:100%;" for="wielkosc1">26x10</label>


chodzi o to "cena1='10'" - jeśli wszystkie buttony z tej grupy radio będą miały swoją wartość "cena1" i zmieniać się będzie ona "z ręki" powinno wszystko grać - tylko co później z funckją? Przecież nie zrobię:
  1. var cenawielkosc = jQuery("input[name=wielkosc]:checked").cena1();
nospor
Zostaw narazie automat. Skup sie na rozmiarze. Czy zmiana na onclick powoduje nadal opoznienia?
shpaque
nie onclick nie. Tylko co dalej jeśli tu zostawię onclick - pozniej musi byc przeciez onfocus w radio buttonach - tam nie dam onclick ,bo nie zaznaczy się w ogole inny niz pierwszy
nospor
Cytat
Tylko co dalej jeśli tu zostawię onclick - pozniej musi byc przeciez onfocus w radio buttonach - tam nie dam onclick ,bo nie zaznaczy się w ogole inny niz pierwszy
Nie wiem o czym teraz do mnie rozmawiasz. Dla radio ma byc onclick a nie onfocus, inaczej zdarzenie bedzie ci sie odpalac za wczesnie. To juz jest wyjasnione i to dziala.

O jakich teraz onfocusach mowisz to nie wiem i juz wiecej nie bede marnowal na to czasu.Moze znajdzie sie ktos inny.
shpaque
dałem wszystkim onclick, ale na końcu dodałem: document.this.checked; i gra dzięki

  1. table.style.width='133px'; table.style.height='51px'; table2.style.width='133px'; table2.style.height='51px'; cena(); document.this.checked;
nospor
Bez document.this.checked; tez bedzie dzialac, bo chodzi o to by bylo onclick.
zas document.this.checked; powoduje ERROR, gdyz nie ma czegos takiego jak document.this. Wystarczylo zajrzec do konsoli js by zobaczyc całą mase bledow jaką generujesz tym kodem. Wiec rownie dobrze mozna to wywalic. Bedzie dobrze i to bez dodatkowych bledow.
shpaque
ale bez tego nie znaznaczalo mi radio - wszystko działało, a kropka była na pierwszym radio
nospor
Kod:
document.this.checked;
jest blednym kodem. Kod ten generuje blad w konsoli js. Rownie dobrze moze tam byc:
alamakota;
efekt bedzie dokladnie ten sam.

Nie chce mi sie wierzyc, ze bez tego kodu nie chce ci dzialac prawidlowo.
Jesli jednak jakims cudem tak jest faktycznie, widocznie cos dzialo sie jeszcze. Po dodaniu blednego kodu przerywane jest dalsze wykonywanie js na tym etapie wiec to "cos jeszcze" nie wykonalo sie i zaczelo ci dzialac poprawnie.
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.