WordPress的+ Ajax页面加载+重力形式+重力形式分页

问题描述:

我有这个成立的那一刻: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或类似的东西让我再次绑定表单。

非常感谢!

+1

它住在什么地方? – shramee

+0

你的描述是足够的,但我需要看到这个现场,所以我可以调试代码,看看有什么问题。或者,至少,你可以发布JavaScript加载代码片段,它是如何触发的? –

+0

您也可以考虑检查主题/插件冲突,如其引力形式文档中所述https://docs.gravityforms.com/testing-for-a-themeplugin-conflict –

挖了一下重力形式插件后,我能够解决这个问题。

因此,这里是我做过什么..希望它可以帮助别人,将来(不知道最好的解决方案,但它的工作原理):

所以“主”的想法是,巴尔巴或任何你正在使用(在我的情况下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调用调用它。