🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.javascript
12 messages
12 total messages Started by S Tue, 20 Mar 2012 09:30
Jak to rozwiązać?
#51046
Author: S
Date: Tue, 20 Mar 2012 09:30
69 lines
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ć?
#51047
Author: TOUDIdel
Date: Tue, 20 Mar 2012 11:06
13 lines
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ć?
#51048
Author: S
Date: Tue, 20 Mar 2012 11:14
27 lines
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ć?
#51049
Author: TOUDIdel
Date: Tue, 20 Mar 2012 12:20
17 lines
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ć?
#51050
Author: S
Date: Tue, 20 Mar 2012 14:52
33 lines
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ć?
#51051
Author: Borys Pogoreło
Date: Tue, 20 Mar 2012 20:05
12 lines
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ć?
#51052
Author: S
Date: Tue, 20 Mar 2012 21:06
26 lines
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ć?
#51053
Author: Herr
Date: Tue, 20 Mar 2012 22:41
43 lines
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ć?
#51057
Author: Borys Pogoreło
Date: Tue, 20 Mar 2012 22:45
12 lines
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ć?
#51054
Author: S
Date: Tue, 20 Mar 2012 23:18
37 lines
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ć?
#51055
Author: Herr
Date: Tue, 20 Mar 2012 23:28
19 lines
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ć?
#51056
Author: S
Date: Wed, 21 Mar 2012 00:19
36 lines
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