![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 9.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
(IMG:http://oi62.tinypic.com/25gs3rl.jpg)
Próbuję uzyskać coś takiego jak powyżej (plik register.php dla buddypress), w momencie gdy użytkownik wybierze typ konta pojawia się jego opis po lewej, a także pola dodatkowe na dole. I generalnie od strony funkcjonalności działa na zasadach ogólnych dzięki jquery: Kod jQuery.noConflict() jQuery(document).ready(function(){ ( function ($) { $("#field_106").val("Użytkownik"); $('#typ-fotograf').hide(); $('#pola-fotograf').hide(); $('#typ-autor').hide(); $('#pola-autor').hide(); $('#typ-uzytkownik').show(); $('#pola-uzytkownik').show(); $('#field_106').change(function () { $('#typ-fotograf').hide(); $('#pola-fotograf').hide(); $('#typ-autor').hide(); $('#pola-autor').hide(); $('#typ-uzytkownik').hide(); $('#pola-uzytkownik').hide(); if (this.options[this.selectedIndex].value == 'Fotograf') { $('#typ-fotograf').show(); $('#pola-fotograf').show(); var selected_type = 'fotograf'; } if (this.options[this.selectedIndex].value == 'Autor') { $('#typ-autor').show(); $('#pola-autor').show(); var selected_type = 'autor'; } if (this.options[this.selectedIndex].value == 'Użytkownik') { $('#typ-uzytkownik').show(); $('#pola-uzytkownik').show(); var selected_type = 'uzytkownik'; } }); })(jQuery); }); Niestety problem pojawia się w momencie wysyłania formularza z powodu błędnej wartości w: input
plik register wyglada mniej wiecej tak - divy ukryty do opisu - form - pola A (while) - w moim przypadku lista wyboru - pola B z innego modułu - div ukryty pokazujący pola C dla opcji pierwszej (while) - div ukryty pokazujący C dla opcji drugiej (while) - div ukryty pokazujący C dla opcji drugiej (while) - input ukryty z lista id - submit - koniec forma W mojej wersji po prostu pokazuje już załadowane ukryte pola, co powoduje problem z przechwyceniem dobrych id do ukrytego inputa, a to z kolei daje błędne warny w niewypełnionych polach z ukrytych divów. Wtedy pomyślałem własnie o switch, aby wykonać reszte kodu w momencie gdy użytkownik dokona wyboru. Ale nie działa to w ten sposób ponieważ nie potrafię przechwycyć zmiennej z jquery, a cały kod php już się wykonał (załadowana strona). A to na logikę oznacza, że całość kodu musi być przetworzona w jakiś inny sposób, tak by fizycznie w momencie wypełniania formularza był widoczny tylko jeden div z polami C-1 lub C-2 lub C-3 i na bazie tego zwrócona informacja z idkami do inputa. Jestem laikiem w tym, robię to po omacku, będę wdzięczny za każdą sugestie w rozwiązaniu tego. EDIT: zmodyfikowałem SWITCH tak, aby zawierał moje pętle oraz odpowiedniego inputa, da się teraz załadować pola z adresu: ?select_type=cos, czyli pozostało mi podpiąc te akcję do mojego selectboxa, tak by przeładowywał tylko diva C pytanie więc brzmi czy muszę ten kawałek kodu wywalić do osobnego pliku no i jak podpiąc te akcje do danej opcji z menu? Ten post edytował Jaremilus 27.03.2015, 18:02:35 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Jeszcze raz, tylko jaśniej, można? Najlepiej z przykładami.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 9.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Jeszcze raz, tylko jaśniej, można? Najlepiej z przykładami. Jaśniej chyba nie potrafię, ale spróbuję. - wordpress >> buddypress - moj szablon strony >> pliki szablonów dla buddypressa Mam trzy pliki registration.php, pola_ladowane.php, addons.js. W pierwszym znajduje się cały kod wymagany do przetworzenia tego szablonu, w tym drugim mam funkcję (switch) która po otrzymaniu parametru ze zmiennej get ładuje te wybrane (case), w pliku .js mam przypisaną akcję do tego selectboxa, funkcję która pokazuje mi odpowiedniego diva z opisem oraz walidacje dla pól. --==-- Cały formularz już działa, tj. po wybraniu opcji przeładowuje stronę, zaznacza wybór, ładuje osobne pola i opisy. Niestety robi to przeładowując całą stronę, a nie za pomocą ajaxa. Gdy próbowałem ładować ajaxem wyłącznie plik.php z wyjętym switchem (tj. kodem odpowiedzialnym za wybrane pola) to pojawiał się fatal z powodu braku zadeklarowanych funkcji w tymże. Musiałem zrozumieć jak to wszystko jest ładowane, jak działa i... odpuściłem, ponieważ ładowanie w tym wypadku całego pliku drugi raz (de facto pliku szablonu modułu buddypress), a nie tylko tej części odpowiadającej za zmianę pól mija się z celem, podobnie jak redeklaracja funkcji - te są też ładowane w specyficzny sposób do pliku szablonu. Mimo to sporo się nauczyłem - poprawiłem kod tj. w switch mam już tylko wyłącznie kod z polami a nie jak na początku tylko ideki.
- poprawiłem jsa Kod (function(){ function getURLParameter(name) { return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null } ( function ($) { $('#typ-fotograf').hide(); $('#typ-autor').hide(); $('#typ-uzytkownik').hide(); $('#typ-powitanie').show(); var val = getURLParameter('wybrany_typ'); $('#field_106').val(val); if ( val == 'Fotograf' ) { $('#typ-artysta').show(); $('#typ-powitanie').hide(); } if ( val == 'Autor' ) { $('#typ-autor').show(); $('#typ-powitanie').hide(); } if ( val == 'Użytkownik' ) { $('#typ-uzytkownik').show(); $('#typ-powitanie').hide(); } $('#field_106').change(function () { if (this.options[this.selectedIndex].value == 'Fotograf') { window.location.href= '?wybrany_typ=' + 'Fotograf'; } if (this.options[this.selectedIndex].value == 'Autor') { window.location.href= '?wybrany_typ=' + 'Autor'; } if (this.options[this.selectedIndex].value == 'Użytkownik') { window.location.href= '?wybrany_typ=' + 'Użytkownik'; } if (this.options[this.selectedIndex].value == '') { $('#typ-powitanie').show(); $('#typ-fotograf').hide(); $('#typ-autor').hide(); $('#typ-uzytkownik').hide(); } }); })(jQuery); }); - dodałem walidacje dla pól
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 08:21 |