Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Jak to rozwiązać?

8 views
Skip to first unread message

S

unread,
Mar 20, 2012, 5:30:35 AM3/20/12
to
Witam

Mam taki problem i nie wiem jak go ugryźć sensownie.
Chodzi o coś takiego:
Mam pola formularza netto, vat, brutto.
Założenie jest takie, że user wpisuje wartość netto, wybiera stawkę VAT i
wylicza mu się wartość brutto. I tu na razie nie ma problemu. Przy pomocy
JQuery poradziłem sobie myślę w sposób dość prosty (kod na końcu postu)
Problem jednak w tym, że muszę to zrealizować też tak, że użytkownik może
dodawać dowolną ilość wierszy z polami netto, vat, brutto i dla każdego z
nich niezależnie oczywiście musi być wyliczona ta wartość brutto w
zależności od podanej wartości netto i wybranej stawki VAT.
Jak to zrealizować sensownie? Jak można sklonować określone wiersze i nie
mogąc określić z góry ich id wyliczyć tą cenę brutto?
Może ktoś ma jakiś pomysł? Może ktoś spotkał sie z takim problem i coś
podpowie. Będę dozgonnie wdzięczny.
A niżej kod który sobie wystukałem aby obliczyć dla jednego z góry wiadomego
wiersza.

$('#rate_int').live('change',function(){
var vat_val = $('#rate_int').val();
var netto = $('#cena_netto').val();

if(netto == ''){
alert("Musisz podać cenę netto!");
}else{
if($('#cena_netto').val().match('^[0-9\.]+$')){
var brutto = (((parseFloat(vat_val) * parseFloat(netto))/100) +
parseFloat(netto)).toFixed(2);

$('#cena_brutto').val(brutto);
var brutto2 = $('#cena_brutto').val();
if(brutto2 == 'NaN'){
$('#rate_int').val('');
$('#cena_netto').val('');
$('#cena_brutto').val('');
alert("Wartość netto musi być wartością liczbową!");

}
}else{
alert("Wartość netto musi być wartością liczbową!");
}
}
});

$('#cena_netto').live('change',function(){
var vat_val = $('#rate_int').val();
if(vat_val != ''){
var netto = $('#cena_netto').val();
var brutto = (((parseFloat(vat_val) * parseFloat(netto))/100) +
parseFloat(netto)).toFixed(2);
if($('#cena_netto').val().match('^[0-9\.]+$')){
$('#cena_brutto').val(brutto);
var brutto2 = $('#cena_brutto').val();
if(brutto2 == 'NaN'){
$('#rate_int').val('');
$('#cena_netto').val('');
$('#cena_brutto').val('');
alert("Wartość netto musi być wartością liczbową!");
}
}else{
alert("Wartość netto musi być wartością liczbową!");
}
}
});


pozdrawiam
Sławek

TOUDIdel

unread,
Mar 20, 2012, 7:06:09 AM3/20/12
to
W dniu 20.03.2012 10:30, S pisze:
> Problem jednak w tym, że muszę to zrealizować też tak, że użytkownik
> może dodawać dowolną ilość wierszy z polami netto, vat, brutto i dla
> każdego z nich niezależnie oczywiście musi być wyliczona ta wartość
> brutto w zależności od podanej wartości netto i wybranej stawki VAT.
> Jak to zrealizować sensownie? Jak można sklonować określone wiersze i
> nie mogąc określić z góry ich id wyliczyć tą cenę brutto?

pseudo-JQuery-kod:

$(".netto").each(function(){
$(this).next(".brutto").val($(this).val() * $(this).next(".vat").val())
})

S

unread,
Mar 20, 2012, 7:14:27 AM3/20/12
to

Użytkownik "TOUDIdel" napisał w wiadomości grup
dyskusyjnych:4f6864a6$0$1271$6578...@news.neostrada.pl...
Wielkie dzięki. Czyli po prostu w pętli funkcja next zczyta mi każdą wartość
i tylko zamiast id to ma być class (bo jak wiadomo na stronie nie może się
powtórzyć to samo id) A wiersz z tymi polami formularza to mogę dodawać
sobie przez .clone()? No i takie małe pytanie czy to mi policzy raz czy już
dla powiedzmy dodanych 3 wierszy będzie liczył dla każdego osobno?
Jeszcze raz wielkie dzięki za pomoc

pozdrawiam
Sławek

TOUDIdel

unread,
Mar 20, 2012, 8:20:35 AM3/20/12
to
W dniu 20.03.2012 12:14, S pisze:
> Wielkie dzięki. Czyli po prostu w pętli funkcja next zczyta mi każdą
> wartość i tylko zamiast id to ma być class (bo jak wiadomo na stronie
> nie może się powtórzyć to samo id) A wiersz z tymi polami formularza to
> mogę dodawać sobie przez .clone()? No i takie małe pytanie czy to mi
> policzy raz czy już dla powiedzmy dodanych 3 wierszy będzie liczył dla
> każdego osobno?

Abstrahując czy class czy id to mało istotne (ważne, żeby selectorem
znaleźć to co chcesz policzyć).

Racja, że id nie powinno się powielać, bo jest to proszenie się o problemy.

Liczyć będzie osobno, czyli dokładnie to, co będzie wpisane, to policzy.
Jak w każdym z wierszy będą inne kwoty, to wyliczy też inne.

td

S

unread,
Mar 20, 2012, 10:52:55 AM3/20/12
to

Użytkownik "TOUDIdel" napisał w wiadomości grup
dyskusyjnych:4f687617$0$26703$6578...@news.neostrada.pl...
:( Generalnie działa tylko nie chce nadać wartości inputowi

Już nawet na wydrę próbowałem nadać wartość temu polu

$(this).next('.cena_brutto').val(1222);

i nic, pole pozostaje puste:(

Na pętli ładnie zczytuje wartości poszczególnych inputów no ale wartości
wrzucić nie chce w to pole.

pozdrawiam
Sławek

Borys Pogoreło

unread,
Mar 20, 2012, 4:05:05 PM3/20/12
to
Dnia Tue, 20 Mar 2012 15:52:55 +0100, S napisaďż˝(a):

> Na p�tli �adnie zczytuje warto�ci poszczeg�lnych input�w no ale warto�ci
> wrzuciďż˝ nie chce w to pole.

.attr('value', 'warto��')

Pami�taj o zaokr�glaniu.

--
Borys Pogore�o
borys(#)leszno,edu,pl

S

unread,
Mar 20, 2012, 5:06:08 PM3/20/12
to

REGON: 080304479
Użytkownik "BorysPogoreło" napisał w wiadomości grup
dyskusyjnych:ba61l7wrtrxp.6j1d71w3s9hj$.dlg@40tude.net...

Dnia Tue, 20 Mar 2012 15:52:55 +0100, S napisał(a):

> Na pętli ładnie zczytuje wartości poszczególnych inputów no ale wartości
> wrzucić nie chce w to pole.

> .attr('value', 'wartość')

>Pamiętaj o zaokrąglaniu.

>--
>Borys Pogoreło
>borys(#)leszno,edu,pl

Niestety nie działa tak też. Nie wiem co krzaczę. Poniżej link, można to
zobaczyć. Oczywiście roboczo przypisałem jakąś wartość do brutto aby tylko
sprawdzić czy wstawia
http://jsfiddle.net/sXL2b/48/


pozdrawiam
Sławek

Herr

unread,
Mar 20, 2012, 6:41:20 PM3/20/12
to
Na szybko:

zamień ostatnią linijkę funkcji podpinanej pod zdarzenie "change" dla
każdego inputa o klasie ".cena_netto_dostawa"
( $(".cena_netto_dostawa").each()... )

na:

$(this).closest('tr').find('input.cena_brutto_dostawa').val(brutto);


czyli:
- dla bieżącego elementu (input) znajdź, poruszając się w górę drzewa
DOM, najbliższy element TR
- dla znalezionego TR znajdź, poruszając się w dół drzewa DOM, input
posiadający klasę "cena_brutto_dostawa"
- jako wartość znalezionego inputa wstaw zawartość zmiennej brutto



Borys Pogoreło

unread,
Mar 20, 2012, 6:45:10 PM3/20/12
to
Dnia Tue, 20 Mar 2012 22:06:08 +0100, S napisał(a):

> Niestety nie działa tak też. Nie wiem co krzaczę. Poniżej link, można to
> zobaczyć. Oczywiście roboczo przypisałem jakąś wartość do brutto aby tylko
> sprawdzić czy wstawia

Pamiętaj też, że .next() złapie pierwszy *kolejny* element. Zapewne
chciałeś użyć .nextAll().

--
Borys Pogoreło
borys(#)leszno,edu,pl

S

unread,
Mar 20, 2012, 7:18:04 PM3/20/12
to

> >Borys Pogoreło
> >borys(#)leszno,edu,pl
>
> Niestety nie działa tak też. Nie wiem co krzaczę. Poniżej link, można to
> zobaczyć. Oczywiście roboczo przypisałem jakąś wartość do brutto aby tylko
> sprawdzić czy wstawia
> http://jsfiddle.net/sXL2b/48/


>Na szybko:

>zamień ostatnią linijkę funkcji podpinanej pod zdarzenie "change" dla
>każdego inputa o klasie ".cena_netto_dostawa"
>( $(".cena_netto_dostawa").each()... )
>
>na:
>
>$(this).closest('tr').find('input.cena_brutto_dostawa').val(brutto);
>
>
>czyli:
>- dla bieżącego elementu (input) znajdź, poruszając się w górę drzewa
>DOM, najbliższy element TR
>- dla znalezionego TR znajdź, poruszając się w dół drzewa DOM, input
>posiadający klasę "cena_brutto_dostawa"
>- jako wartość znalezionego inputa wstaw zawartość zmiennej brutto

Super! To działa:)
Wielkie dzięki.
To teraz mogę dalej to oprogramowywać:)
Bo rozumiem że według tej filozofii pobiorę sobie tez i wartość a również
będę mógł wykonywać inne metody na tych wybranych elementach bo kluczowe tu
jest $(this).closest('tr').find()

pozdrawiam
Sławek

Herr

unread,
Mar 20, 2012, 7:28:14 PM3/20/12
to
S wrote:

[rachu - ciachu]

> Super! To działa:)
> Wielkie dzięki.
> To teraz mogę dalej to oprogramowywać:)
> Bo rozumiem że według tej filozofii pobiorę sobie tez i wartość a również
> będę mógł wykonywać inne metody na tych wybranych elementach bo kluczowe tu
> jest $(this).closest('tr').find()

Wydaje mi się że jeżeli rozeznasz się w drzewku DOM które sobie
zbudowałeś (przy użyciu firebuga, dragonfly, w chrome/IE też są do tego
narzędzia), zapoznasz się z odpowiednim rozdziałem w dokumentacji:

http://api.jquery.com/category/traversing/

to już nie powinieneś mieć żadnych kłopotów z dostaniem się do
konkretnego elementu...



S

unread,
Mar 20, 2012, 8:19:26 PM3/20/12
to

>Użytkownik "Herr" napisał w wiadomości grup
>dyskusyjnych:jkb3qd$gkr$1...@node2.news.atman.pl...
Tak, staram się tego używać ale ja chyba po prostu do końca nie mogę załapać
filozofii tego wszystkiego (no ale generalnie to moje pierwsze kroki bo do
tej pory to głownie PHP)
Teraz z kolei nie mogę wymyśleć jak te poszczególne wiersze usuwać
Tu moje wypociny http://jsfiddle.net/cCDCx/36/
Wymyśliłem sobie, ze na pętli wywołam click dla danej klasy ale to jakoś nie
wychodzi (może dlatego, ze już siedzę przy tym wszystkim od ósmej rano:))


pozdrawiam
Sławek

0 new messages