Thread View: pl.comp.lang.javascript
12 messages
12 total messages
Started by S
Tue, 20 Mar 2012 09:30
Jak to rozwiązać?
Author: S
Date: Tue, 20 Mar 2012 09:30
Date: Tue, 20 Mar 2012 09:30
69 lines
3703 bytes
3703 bytes
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
Re: Jak to rozwiązać?
Author: TOUDIdel
Date: Tue, 20 Mar 2012 11:06
Date: Tue, 20 Mar 2012 11:06
13 lines
1653 bytes
1653 bytes
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())
})
Re: Jak to rozwiązać?
Author: S
Date: Tue, 20 Mar 2012 11:14
Date: Tue, 20 Mar 2012 11:14
27 lines
2187 bytes
2187 bytes
Użytkownik "TOUDIdel" napisał w wiadomości grup
dyskusyjnych:4f6864a6$0$1271$65785112@news.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
Re: Jak to rozwiązać?
Author: TOUDIdel
Date: Tue, 20 Mar 2012 12:20
Date: Tue, 20 Mar 2012 12:20
17 lines
1797 bytes
1797 bytes
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
Re: Jak to rozwiązać?
Author: S
Date: Tue, 20 Mar 2012 14:52
Date: Tue, 20 Mar 2012 14:52
33 lines
2316 bytes
2316 bytes
Użytkownik "TOUDIdel" napisał w wiadomości grup
dyskusyjnych:4f687617$0$26703$65785112@news.neostrada.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
Re: Jak to rozwiązać?
Author: Borys Pogoreło
Date: Tue, 20 Mar 2012 20:05
Date: Tue, 20 Mar 2012 20:05
12 lines
1242 bytes
1242 bytes
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
Re: Jak to rozwiązać?
Author: S
Date: Tue, 20 Mar 2012 21:06
Date: Tue, 20 Mar 2012 21:06
26 lines
1813 bytes
1813 bytes
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
Re: Jak to rozwiązać?
Author: Herr
Date: Tue, 20 Mar 2012 22:41
Date: Tue, 20 Mar 2012 22:41
43 lines
2401 bytes
2401 bytes
S wrote:
>
> 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/
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
Re: Jak to rozwiązać?
Author: Borys Pogoreło
Date: Tue, 20 Mar 2012 22:45
Date: Tue, 20 Mar 2012 22:45
12 lines
1430 bytes
1430 bytes
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
Re: Jak to rozwiązać?
Author: S
Date: Tue, 20 Mar 2012 23:18
Date: Tue, 20 Mar 2012 23:18
37 lines
2367 bytes
2367 bytes
> >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
Re: Jak to rozwiązać?
Author: Herr
Date: Tue, 20 Mar 2012 23:28
Date: Tue, 20 Mar 2012 23:28
19 lines
1890 bytes
1890 bytes
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...
Re: Jak to rozwiązać?
Author: S
Date: Wed, 21 Mar 2012 00:19
Date: Wed, 21 Mar 2012 00:19
36 lines
2573 bytes
2573 bytes
>Użytkownik "Herr" napisał w wiadomości grup
>dyskusyjnych:jkb3qd$gkr$1@node2.news.atman.pl...
>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...
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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads