2017-09-15 105 views
5

我有這個成立的那一刻: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 –

回答

0

挖了一下重力形式插件後,我能夠解決這個問題。

因此,這裏是我做過什麼..希望它可以幫助別人,將來(不知道最好的解決方案,但它的工作原理):

所以「主」的想法是,巴爾巴或任何你正在使用(在我的情況下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(); 
} 
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調用調用它。