2017-09-15 7 views
5

のWordpress + Ajaxのページの読み込み+重力フォーム+重力フォームの改ページ

A WordPressのサイト、私はすべてのページのコンテンツは、AJAXを使ってロードされhttp://barbajs.org/ に似たものを使用しています<main></main>タグに追加します。

ページの1つ(連絡先ページ)に、重力フォームがあり、改ページを使用しています。フォームはステップで作成され、各ステップはページ内にロードされます。読み込んだ最初のページがそのページ(連絡先ページ)であればすべて動作しますが、別のページにアクセスして戻ったり、前のページから連絡を取ったりするとすぐにフォームが機能しなくなります。

修正方法に関するアイデア。

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

重力フォームのプラグインを少し掘った後、私はこれを修正することができました。だからここ

は、私が何をしたか..ですそれは(最善の解決策であればわからないが、それは動作します)将来的に誰かを役に立てば幸い:

だから、「メイン」という考えは、その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(); 
} 
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呼び出しの後にこれを呼び出してください。

関連する問題