Wordpress + Ajax页面加载+重力形式+重力形式分页符

时间:2017-09-15 10:46:29

标签: ajax wordpress gravity-forms-plugin gravity gravityforms

我现在有这个设置:

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 个答案:

答案 0 :(得分:0)

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

所以这就是我所做的..希望它能帮助将来某个人(不确定最佳解决方案是否有效):

所以&#34;主要&#34;想法是barba或你正在使用的任何东西(在我的情况下是biggie)正在为一个新页面进行ajax调用,你将有一个类似ready / newPageReady函数的东西,在这里你做一个新的ajax调用来获取你的表单。 / p>

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();
}

答案 1 :(得分:0)

不确定它是否是正确的解决方案,但我设法通过调用带有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调用后调用此方法。