Wordpress + загрузка страниц Ajax + Гравитационные формы + Гравитационные формы разрыв страницы
У меня это настроено на данный момент:
Сайт WordPress, я использую что-то похожее на http://barbajs.org/ Так что каждый контент страницы загружается через ajax в <main></main>
тег.
На одной из страниц (страница контактов) у меня есть гравитационная форма, и я использую разрыв страницы. Форма состоит из шагов, и каждый шаг загружается внутри страницы. Все работает, если первая страница, которую я загружаю, это та страница (страница контактов), но как только я перехожу на другую страницу и возвращаюсь, или если я перехожу на страницу контактов с предыдущей страницы, форма больше не работает,
Любые идеи о том, как это исправить. Это часть кода:
Wordpress: WYSIWYG с коротким кодом
[gravityform id="2" title="false" description="false" ajax="true"]
На нагрузке у меня есть это:jQuery('#gform_wrapper_2').show()
(Это единственное, что работает), поэтому я не получаю черную страницу.
Если я нажимаю на следующий шаг (он не загружается на следующем шаге) и я пробую это: Это я нашел в документации или на следующей кнопке под 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]);
Мне понадобится что-то вроде gform.init()
в идеале:D или что-то подобное, что позволяет мне снова связать форму.
Большое спасибо!
2 ответа
Немного покопавшись в плагине гравитационной формы, я смог это исправить.
Итак, вот что я сделал... надеюсь, это поможет кому-то в будущем (не уверен, что это лучшее решение, но оно работает):
Таким образом, "основная" идея заключается в том, что barba или то, что вы используете (в моем случае, biggie), делает вызов ajax для новой страницы, и у вас будет что-то вроде функции ready / newPageReady, здесь вы делаете новый вызов ajax для получить вашу форму.
JS: (Учитывая, что gform использует jquery, вы можете использовать его)
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();
}
Не уверен, что это правильное решение, но мне удалось сделать что-то вроде gform.init()
вызывая теги скрипта в форме с eval()
, Тезисы скриптов вставляются после каждой формы плагином.
Например, после того, как вы измените свою страницу с помощью ajax, сделайте что-то вроде этого:
// 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
}
Обязательно вызывайте это только после вызова AJAX.