![]() |
![]() ![]() |
![]() |
![]()
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
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
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 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
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
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ę:
... 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:
Metoda inna ale efekt identyczny. Jak poczytasz rozdział o selektorach (http://api.jquery.com/category/selectors/) to odkryjesz jeszcze więcej sposobów. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 8 Dołączył: 22.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
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. document.forms I po wywołaniu ..... Za każdym razem zwróci ten sam wynik, czyli prawdopodobnie elementu pierwszego z pętli. Nie, nie zwróci, jeżeli wewnątrz funkcji obsługującej zdarzenie odwołasz się za pomocą "this" ;p ... (this = kliknięty element) |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Kurcze faktycznie gdy zrobiłem test kodem:
To wyniki są odrębne dla każdejgo elementu form. I rzeczywiście działa to bez problemu. Ale gdy podpiąłem to:
To zwraca mi wartość tylko pierwszego form, bez względu na który guzik nacisnę. Dodam, że chodzi o Wordpressa. Usiłuję rozgryźć ajaxa i trafiłem na ścianę właśnie z tym problemem. Czyli gdzieś popełniłem błąd ale nie wiem gdzie ![]() Ten post edytował hejkumkejkum 2.01.2014, 22:48:29 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Wiem, że poucinałeś niepotrzebne fragmenty kodu, ale czy w liniach 11 i 12 nie powinno być:
![]() To jest prefix który dodaje, ale zastąpiłem go sss. Tutaj zapomniałem go zastąpić przed wklejeniem ![]() Czyli wszędzie tam gdzie jest dkfp to powinno byc sss. Ale błąd popełniłem tylko przy wklejaniu na forum. Już poprawiłem post. Znalazłem coś takiego. http://stackoverflow.com/questions/2066980...hp-foreach-loop W zasadzie to ten sam problem co mój z ta różnicą, że tam miał każde ID takie samo. Czyżby jednak wynikało z tego, że dla ajaxa musi to być inaczej rozwiązane niż u mnie? Czyli dodanie id z przyrastającą zmienną $i? Ten post edytował hejkumkejkum 2.01.2014, 23:10:31 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
HTML jest dokładnie taki jak ten, który wkleiłeś w pierwszej wiadomości?
Ten post edytował bostaf 2.01.2014, 23:07:29 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ok chyba znalazłem problem.
I chyba szukałem nie tam gdzie trzeba. Prawdopodobnie problemem jest funkcja jquery , która po prostu kasuje diva (podmienia), zatem drugie kliknięcie nie znajduje miejsca do którego może załadowac wynik. Dzieki panowie za w pewnym sensie nakierowanie na rozwiązanie ![]() Panowie jeszcze pociągnę temat:
Jak w tym wypadku mając pętlę przesyłać formularz po kliknięciu na SUBMIT .do_koszyka_button"? Jak się do tego dobrać? Czy muszę nadać jakiemuś elementowi ID? Mogę to zrobić jedynie przez użycie zmiennej $post->ID. Chyba, ze da się poprzez selektory jquery odwołać do każdego przycisku z osobna. Obecnie dodaje mi do koszyka tylko pierwszą pozycję bez względu na to który przycisk nacisnę. Przkład jest podobny do tego z tematu jednak tam o tyle wystąpiła pomyłka, że odwołanie było do klasy przypisanej do form, a nie do przycisku submit.
Powyższe zwróci oczywiście undefined. W zasadzie tylko ten problem mi pozostał by uruchomić dodawanie do koszyka za pomocą ajaxa. Ten post edytował hejkumkejkum 30.01.2014, 14:05:12 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Spróbuj tak:
Inna sprawa, że mieszać tu może nadawanie takich samych id elementom. Zamień #dkfp_product_id na .dkfp_product_id (+ zmiana w kodzie HTML). Równie dobrze możesz pobrać całą zawartość formularz (nie pole po polu) i wysłać ją AJAXem. Zrobisz to poprzez:
To wysyłasz AJAXem jako data. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ok działa zrobiłem tak, lecz miałem problem z serialize(); bo o ile serialize zwraca wszystko ok tak nie wiem w jaki sposób mam wstawić zmienną z serialize do ajaxa w data: gdzie mam też wywołanie funkcji action: "dkfp_dodaj_do_koszykaa".
Zmieniłem również id na class.
Ten post edytował hejkumkejkum 30.01.2014, 20:48:19 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Zamiast tego:
możesz użyć (już bez { i }):
Nie musisz wówczas wklepywać pole po polu - po prostu przesyłasz cały formularz. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.07.2025 - 23:57 |