2017-09-15 86 views
5

mam to ustawić w tej chwili:Wordpress + Ajax strona ładowanie + Gravity postacie + Gravity strona formy przerwa

WordPress miejscu, Używam coś podobnego do http://barbajs.org/ Więc każdy Zawartość strony jest ładowany przez AJAX do tagu <main></main>.

Na jednej ze stron (strona kontaktowa) mam formę grawitacji i używam podziału strony. Formularz jest tworzony w krokach, a każdy krok jest ładowany na stronę. Wszystko działa, jeśli pierwsza strona, którą wczytuję, jest tą stroną (stroną kontaktową), ale jak tylko przejdę na inną stronę i wrócę, lub gdy przejdę do strony kontaktowej z poprzedniej strony, formularz już nie działa .

Wszelkie pomysły, jak to naprawić. Jest to część kodu:

Wordpress: WYSIWYG z SHORTCODE

[gravityform id="2" title="false" description="false" ajax="true"] 

Na obciążenia, mam to: jQuery('#gform_wrapper_2').show() (Jest to jedyna rzecz, która działa), więc nie rozumiem czarna strona.

Jeśli kliknę na kolejnym etapie (nie załadować następny krok) i próbowałem to: To znalazłem w dokumentacji lub w następnym przycisk pod onclick = "..."

jQuery(document).trigger('gform_post_conditional_logic', [2, null, true]) 
jQuery(document).bind('gform_post_conditional_logic', function(event, formId, fields, isInit){}) 
jQuery(document).trigger('gform_post_render', [2, 1]) 
jQuery("#gform_target_page_number_2").val("2"); 
jQuery("#gform_2").trigger("submit",[true]); 

będę potrzebował coś takiego jak gform.init() idealnie: D lub coś podobnego, co pozwala mi ponownie związać formularz.

Wielkie dzięki!

+1

Czy jest gdzieś? – shramee

+0

Twój opis jest wystarczająco przyzwoity, ale muszę zobaczyć to na żywo, aby móc debugować kod i zobaczyć, co się dzieje. Lub, przynajmniej, możesz opublikować fragment kodu ładującego javascript i jak jest on uruchamiany? –

+0

Możesz także rozważyć sprawdzenie konfliktów tematów/pluginów, opisanych w ich formularzach grawitacji docs https://docs.gravityforms.com/testing-for-a-hemheli-conflikt –

Odpowiedz

0

Po wykopaniu odrobiny wtyczki formy grawitacyjnej udało mi się to naprawić.

Więc oto co zrobiłem .. nadzieję, że pomoże komuś w przyszłości (nie wiem, czy najlepsze rozwiązanie, ale działa):

więc „main” Chodzi o to, że barba lub cokolwiek używasz (w moim przypadku biggie) robi wywołanie ajax dla nowej strony, a będziesz miał coś w rodzaju funkcji ready/newPageReady, tutaj wykonujesz nowe wywołanie ajaxowe, aby otrzymać formularz.

JS: (zważywszy, że gform wykorzystuje jQuery można go używać)

ready(done) { 

    ajax.get(APP.AJAX_URL + '?action=get_form', { 

     success: (object) => { 

     //console.log(object.data) 

     jQuery('.main-content-wrapper').append(object.data) 
     jQuery('body #gform_wrapper_2').show() 

    } 
    }) 
} 


addEvents() { 

    // this will check everytime a form is loaded 

    jQuery(document).bind('gform_page_loaded', this.gform) 

} 


gform(event, form_id, current_page) { 

    //Here the form is loaded but not showed.. you can do something like this 

    TweenMax.fromTo('.gform_wrapper', 1.2, {autoAlpha: 0}, {autoAlpha:1}) 
} 

functions.php

add_action('wp_ajax_nopriv_get_form', 'get_form'); 
add_action('wp_ajax_get_form', 'get_form'); 

function get_form() { 

    gravity_form(id_of_your_form,false, false, false, false, true); 

    die(); 
} 
0

Nie jestem pewien, czy jest to dobre rozwiązanie, ale udało mi się zrobić coś takiego gform.init() przez wywoływanie znaczników skryptów w formularzu z numerem eval(). Skrypty te są wstawiane po każdym formularzu przez wtyczkę.

Na przykład, po zmianie strony z AJAX, zrób coś takiego:

// After changing page with ajax : 

var scripts = myNewForm.querySelectorAll('script'); // where "myNewForm" is the container including the new form added after an ajax call 

for (var i = 0; i < scripts.length; i++) { // "For" loop in case there is more than one script added by the plugin 

    eval(scripts[i].innerHTML); // --> this will init the new form 
} 

Koniecznie zadzwoń do tego dopiero po ajax wywołania.