Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX][PHP]Pętla Foreach oraz wywołanie zmiennej przez ajax
hejkumkejkum
post
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 11.11.2007

Ostrzeżenie: (0%)
-----


Mam sobie w pętli w PHP wygenerowany form z polami input ukrytymi do przesłania $_POSTem.
Chciałem się dobrac do nich poprzez ajax.

Na przykład coś takiego

  1. <form class="sss_dodaj_class" action="" method="post">
  2. <input type="hidden" id="sss_product_id" name="sss_product_id" value="<?php echo $id; ?>" />
  3. <input type="hidden" id="sss_action" name="sss_action" value="dodaj" />
  4. <input type="image" name="dodaj" class="sss_podsumowanie_dodaj" value="dodaj" title="dodaj"/>
  5. </form>
  6.  
  7.  
  8. <form class="sss_dodaj_class" action="" method="post">
  9. <input type="hidden" id="sss_product_id" name="sss_product_id" value="<?php echo $id; ?>" />
  10. <input type="hidden" id="sss_action" name="sss_action" value="dodaj" />
  11. <input type="image" name="dodaj" class="sss_podsumowanie_dodaj" value="dodaj" title="dodaj"/>
  12. </form>
  13.  
  14. <form class="sss_dodaj_class" action="" method="post">
  15. <input type="hidden" id="sss_product_id" name="sss_product_id" value="<?php echo $id; ?>" />
  16. <input type="hidden" id="sss_action" name="sss_action" value="dodaj" />
  17. <input type="image" name="dodaj" class="sss_podsumowanie_dodaj" value="dodaj" title="dodaj"/>
  18. </form>

Problem polega na tym, że obecnie w pętli mam tylko clasy, czyli nie mam się jak odwołać do każdego form z osobna.
I po wywołaniu
  1. jQuery(".sss_dodaj_class").click(function(){


Za każdym razem zwróci ten sam wynik, czyli prawdopodobnie elementu pierwszego z pętli.
W jaki sposób zrobić, żeby to działało jak należy.
Wiem, że mogę do pętli dodać zmienną $i=0 $i++ i dodać to do class "sss_dodaj_class<?php echo $i; ?>"
Ale może istnieje lepszy sposób?
Jak to ugryźć?

Ten post edytował hejkumkejkum 2.01.2014, 02:54:06
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bostaf
post
Post #2





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Cytat(hejkumkejkum @ 2.01.2014, 02:26:27 ) *
Problem polega na tym, że obecnie w pętli mam tylko clasy, czyli nie mam się jak odwołać do każdego form z osobna.
I po wywołaniu
  1. jQuery(".sss_dodaj_class").click(function(){


Za każdym razem zwróci ten sam wynik, czyli prawdopodobnie elementu pierwszego z pętli.
W jaki sposób zrobić, żeby to działało jak należy.

Jest OK. To co zrobiłeś w jQuery powoduje przypięcie do każdego elementu z klasą sss_dodaj_class (czyli do 3 formularzy) obsługi zdarzenia click. Każdy z tych detektorów jest świadomy swojego położenia - wie, do którego formularza należy. Dla przykładu, jeśli umieścisz w tamtej funkcji obsługi zdarzenia taką instrukcję:
[JAVASCRIPT] pobierz, plaintext
  1. jQuery(".sss_dodaj_class").click(function(){
  2. var a = $("input[name='sss_product_id']", this);
  3. alert(a.val());
  4. });
[JAVASCRIPT] pobierz, plaintext

... to klikając gdziekolwiek wewnątrz tych trzech formularzy otrzymasz wartość (to co ustawiasz w atrybucie value, ze zmiennej PHP $id) odpowiedniego inputa o nazwie sss_product_id. Dzieje się tak bo selektor this dokładnie określa z którego formularza został wywołany (tak jak pisałem - jest "świadomy" swojego położenia).

Jeśli chcesz zrezygnować a określania elementów za pomocą ich atrybutów (class, name, itd) to przyjąwszy, że struktura formularzy jest stała, możesz odwołać się do kolejności elementów i wykorzystać funkcję jQuery eq(), która pozwoli Ci wybrać konkretny element z zestawu inputów:
[JAVASCRIPT] pobierz, plaintext
  1. jQuery(".sss_dodaj_class").click(function(){
  2. var a = $(this).find('input').eq(0); // 0 - pierwszy ze znalezionych inputów, 1 - drugi, ...
  3. alert(a.val());
  4. });
[JAVASCRIPT] pobierz, plaintext

Metoda inna ale efekt identyczny.
Jak poczytasz rozdział o selektorach (http://api.jquery.com/category/selectors/) to odkryjesz jeszcze więcej sposobów.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 17:06