shpaque
5.02.2014, 08:55:28
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
<span style="color:#FFFFFF;font-family:'Trebuchet MS';font-size:25px;" id="fullcena">
<script type="text/javascript">
function cena()
{
var cenawielkosc = tutaj value z radio o nazwie "wielkosc";
var cenaautomat = itd;
var cenawysylka = itd;
var cenacalosc = cenawielkosc + cenaautomat + cenawysylka;
var fullcena = document.getElementById('fullcena');
fullcena.innerHTML = "Cena brutto: " + cenacalosc;
}
cena();
</script>
</span>
jak przypisać do nich odpowiednie kwoty i później je zsumować i wyświetlić cenę?
aniolekx
5.02.2014, 09:15:01
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
5.02.2014, 09:21:50
chciałbym na końcu zrobić coś takiego:
<span style="color:#FFFFFF;font-family:'Trebuchet MS';font-size:25px;" id="fullcena">
<script type="text/javascript">
function cena()
{
var cenawielkosc = document.getElementsByName('wielkosc').value;
if cenawielkosc == 26x10 {cena1 = 10;}
if cenawielkosc == 38x14 {cena1 = 20;} - to tylko przyklad tego co chcialbym osiagnac
var cenaautomat = document.getElementsByName('model').value;
if - tu analogicznie (powiedzmy że if model == ewetwyu {cena2 = 14;}
var cenawysylka = document.getElementsByName('odbior').value;
i tu również
var cenacalosc = cena1 + cena2 + cena3;
var fullcena = document.getElementById('fullcena');
fullcena.innerHTML = "Cena brutto: " + cenacalosc;
}
cena();
</script>
</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
5.02.2014, 09:32:00
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
5.02.2014, 09:42:31
no właśnie tylko cholera dlaczego...
<span style="color:#FFFFFF;font-family:'Trebuchet MS';font-size:25px;" id="fullcena">
<script type="text/javascript">
function cena()
{
var cenawielkosc = jQuery("input[name=wielkosc]:checked").val();
var cenaautomat = jQuery("input[name=model]:checked").val();
var cenawysylka = jQuery("input[name=odbior]:checked").val();
var cenacalosc = cenawielkosc + cenaautomat + cenawysylka;
var fullcena = document.getElementById('fullcena');
fullcena.innerHTML = "Cena brutto: " + cenacalosc;
}
cena();
</script>
</span>
teraz wyświetla mi wszystkie dane value jak trzeba, jednak po przerzuceniu radio na inny value - nic się nie zmienia...
nospor
5.02.2014, 09:44:19
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
5.02.2014, 09:47:11
znaczy inaczej - pozycja buttona się zmienia - tzn "parkuje" tam gdzie kliknę, tylko ta wartość na dole w cenie - nie...
nospor
5.02.2014, 09:48:48
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
5.02.2014, 10:10:56
wywaliłem - to nie to...
może zamiast jQuery dałbyś mi żywy JS wpis wyciągający value?
nospor
5.02.2014, 10:16:26
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
5.02.2014, 10:23:21
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
5.02.2014, 10:25:40
Gdy klikniesz na zmiane rozmiaru to chcesz w tym momencie wyswietlic inna cene?
shpaque
5.02.2014, 10:27:47
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
5.02.2014, 10:29:11
shpaque
5.02.2014, 10:32:16
to inaczej.
KIEDY mam zdefiniować lub/i wywołać funkcję cena(), żeby na bieżąco pobierał mi valuesy przypisane do radio buttonów?
nospor
5.02.2014, 10:33:39

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
5.02.2014, 10:35:24
wiesz, że jestem zielony w tym...
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
5.02.2014, 10:37:19
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
5.02.2014, 10:46:56
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
5.02.2014, 10:50:32
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
5.02.2014, 10:52:59
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
5.02.2014, 10:55:52
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
5.02.2014, 10:57:52
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
5.02.2014, 11:02:06
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
5.02.2014, 11:05:23
chroma, safari i IE - mają z tym problem
nospor
5.02.2014, 11:05:53
Poprostu zrob co napisalem.
shpaque
5.02.2014, 11:10:03
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
5.02.2014, 11:15:16
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
5.02.2014, 11:23:18
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
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
5.02.2014, 11:26:23
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
5.02.2014, 11:36:11
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:
<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ę:
var cenawielkosc = jQuery("input[name=wielkosc]:checked").cena1();
nospor
5.02.2014, 11:40:56
Zostaw narazie automat. Skup sie na rozmiarze. Czy zmiana na onclick powoduje nadal opoznienia?
shpaque
5.02.2014, 12:00:09
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
5.02.2014, 12:03:36
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
5.02.2014, 12:26:04
dałem wszystkim onclick, ale na końcu dodałem: document.this.checked; i gra dzięki
table.style.width='133px'; table.style.height='51px'; table2.style.width='133px'; table2.style.height='51px'; cena(); document.this.checked;
nospor
5.02.2014, 13:24:51
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
5.02.2014, 14:26:26
ale bez tego nie znaznaczalo mi radio - wszystko działało, a kropka była na pierwszym radio
nospor
5.02.2014, 14:35:46
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.