-
1. Data: 2012-03-20 09:30:35
Temat: Jak to rozwiązać?
Od: "S" <a...@w...pl>
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
-
2. Data: 2012-03-20 11:06:09
Temat: Re: Jak to rozwiązać?
Od: TOUDIdel <t...@o...pl>
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())
})
-
3. Data: 2012-03-20 11:14:27
Temat: Re: Jak to rozwiązać?
Od: "S" <a...@w...pl>
Użytkownik "TOUDIdel" napisał w wiadomości grup
dyskusyjnych:4f6864a6$0$1271$6...@n...neostrada
.pl...
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())
>})
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
-
4. Data: 2012-03-20 12:20:35
Temat: Re: Jak to rozwiązać?
Od: TOUDIdel <t...@o...pl>
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
-
5. Data: 2012-03-20 14:52:55
Temat: Re: Jak to rozwiązać?
Od: "S" <a...@w...pl>
Użytkownik "TOUDIdel" napisał w wiadomości grup
dyskusyjnych:4f687617$0$26703$6...@n...neostrad
a.pl...
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.
:( 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
-
6. Data: 2012-03-20 20:05:05
Temat: Re: Jak to rozwiązać?
Od: Borys Pogoreło <b...@p...edu.leszno>
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
-
7. Data: 2012-03-20 21:06:08
Temat: Re: Jak to rozwiązać?
Od: "S" <a...@w...pl>
REGON: 080304479
Użytkownik "BorysPogoreło" napisał w wiadomości grup
dyskusyjnych:ba61l7wrtrxp.6j1d71w3s9hj$....@4...n
et...
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
-
8. Data: 2012-03-20 22:41:20
Temat: Re: Jak to rozwiązać?
Od: Herr <s...@s...out.there>
S wrote:
>
> REGON: 080304479
> Użytkownik "BorysPogoreło" napisał w wiadomości grup
> dyskusyjnych:ba61l7wrtrxp.6j1d71w3s9hj$....@4...n
et...
>
> 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/
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_dostaw
a').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
-
9. Data: 2012-03-20 22:45:10
Temat: Re: Jak to rozwiązać?
Od: Borys Pogoreło <b...@p...edu.leszno>
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
-
10. Data: 2012-03-20 23:18:04
Temat: Re: Jak to rozwiązać?
Od: "S" <a...@w...pl>
> >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_dosta
wa').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