Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Kilka formularzy na tej samej stronie
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
markonix
Witam

Problem dosyć krótki i najlepiej na przykładzie:

  1. <input type="hidden" name="za_sztuke">
  2. <input type="text" name="ilosc">
  3. <input type="text" name="cena">
  4. </form>
  5.  
  6. <input type="hidden" name="za_sztuke" title="Tu ustalona będzie cena, różna za każdym razem">
  7. <input type="text" name="ilosc" title="Tu wpisze user ilość">
  8. <input type="text" name="cena" title="Tu wyświetli cene">
  9. </form>


Chce napisać kalkulator. Wykorzystam funkcje val() itp. i nie ma problemu dopóki na stronie nie pojawi się kilka tych samych formularzy o zbliżonej strukturze bez komplikowania sprawy różnymi id czy classami.
Jak mam odnieść się do jednego konkretnego formularza w jquery? Gdy wpiszę ilość w drugim formularzu to pobierze wartość 'ilosc' z drugiego, jak z pierwszego to z pierwszego.

Próbowałem z funkcją .next() np. .next(input[name=ilosc]) ale ta funkcja nie działa tak jakbym chciał, widocznie ma inne zastosowanie.

Oczekiwany rezultat osiągnąłem dzięki "eq" i index ale opieranie się o indeksy (po wpisaniu ilości pobiera wartość z inputu o index mniejszy o 1, i wpisuje wynik w input o index + 1) wydaje mi się mocno przekombinowanym sposobem i nie do końca uniwersalnym bo nie przewiduje innych pól pomiędzy i wymaga ustalania konkretnych indeksów, a ilość kodu jest bardzo spora.

Moje pytanie jak odnieść się do "aktywnego" (czyli coś analogicznego "this") formularza?
sebekzosw
$form = $(this).parent(); (aktywny formularz)

albo $('ID_FORM input[name=ilosc]').val();

można kombinować...

(nie wiem czy to działa!:

$(this.target).closest("form");

)
markonix
Cytat(sebekzosw @ 15.09.2010, 19:58:16 ) *
$form = $(this).parent(); (aktywny formularz)

albo $('ID_FORM input[name=ilosc]').val();

można kombinować...

(nie wiem czy to działa!:

$(this.target).closest("form");

)


Dzięki za pomoc ale jednak to nie to (nie działało albo po prostu nie umiałem tego zastosować).
Wykluczyłem też drugie "albo" bo chciałem zachować jak największą uniwersalność (bez nadawania ID każdemu z form).

Dla potomnych:

  1. function price_refresh(form) {
  2. var cena,sztuk,price;
  3. cena = $(form).find('[name=cena_za_sztuke]').val(); // hidden input
  4. sztuk = $(form).find('[name=sztuk]').val();
  5. price = cena * sztuk;
  6. $(form).find('[name=c_price]').attr('value', price); // wyświetl cenę
  7. }
  8.  
  9. $(document).ready(function(){
  10. $("input[name=sztuk]").keyup(function(){
  11. var form = this.form;
  12. price_refresh(form);
  13. });
  14. });


Wykorzystałem funkcję find. Przy zmianie wartości inputu "sztuk" wykonuje się funkcja price_refresh z argumentem "this.form".

Dam "Pomógł" żeby oznaczyć jako rozwiązane winksmiley.jpg
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.