9

複数ページのフォームがあります。

このフォームの最後のページでカスタム JavaScript を実行したいと思います。理論的には、現在のページ番号を取得して条件を記述するだけです。

シンプルですね。どうやらそうではありません。

私の元の回避策は次のようなものでした:

if ($('gform_page').last().css('display') !== 'none') {
    // perform custom scripts now that the last
    // Gravity Form page is being shown
}

しかし、フォーム内でこれを試したすべての$('...').css('display')要素を返します。ユーザーが [次へ] ボタンを押すたびに、カスタム スクリプトが実行されていました。葉巻はありません。undefined

次に、Gravity Forms のドキュメントを確認したところ、2 つの有用なイベントが見つかりました:gform_post_rendergform_page_loaded.

ただし、ドキュメントには、パラメーターへのアクセス方法に関する指示はありません。

jQuery(document).bind('gform_page_loaded', function(event, form_id, current_page){
    console.log(current_page);
    // returns nothing when loaded in the footer
    // returns [Object, object] when placed in an HTML field in the form
});

正しいコードを持っていないことに加えて、functions.php と header.php で次のことを無益に試したので、正しい場所にコードがないのではないかと疑っています (ドキュメントが示唆するように):

<?php
function enqueue_custom_script($form, $is_ajax){
    if ($is_ajax) :
        echo '<script>console.log(current_page);</script>';
    endif;
}
add_action("gform_enqueue_scripts", "enqueue_custom_script", 10, 2);
?>

質問:

現在のページ番号を取得するにはどのようなコードが必要ですか? さらに重要なのは、そのコードをどこに配置すればよいでしょうか?

4

8 に答える 8

8

OPが受け入れた回答はうまくいくかもしれませんが、Ajaxを使用してページネーションするようにフォームを設定している場合はうまくいきません。

その場合、Javascript と次の方法を使用してのみ動作させることができました。

http://www.gravityhelp.com/documentation/page/Gform_post_render

jQuery(document).bind('gform_post_render', function (event, formId, current_page) {
    if (current_page == 2) {
        // do something
    }
});

もちろん、formIdパラメータを使用してこれを特定のフォームに制限することもできます

于 2014-11-04T17:18:54.073 に答える
8

わかった。

この関数rgpostは、明らかに、現在のページ番号にアクセスする際に重要です。自分でいろいろいじった後、functions.php と、header.php の wp_head() 関数の直前の両方で、次のコードを動作させることができました。

function run_script_on_last_page($form) {
    if (!is_admin()) {
        $current_page = rgpost('gform_source_page_number_' . $form['id']) ? rgpost('gform_source_page_number_' . $form['id']) : 1;
        if ($current_page == 10) {
            wp_enqueue_script('custom_script', get_template_directory_uri() . '/js/custom_script.js', array('jquery'), null, true);
        }
    }
}
add_action('gform_enqueue_scripts_63', 'run_script_on_last_page');

上記のコードをコピーして貼り付ける場合は、次のことを確認してください。

  • 10確認したいページに置き換えます
  • パラメータが正しいことを確認してくださいwp_enqueue_script
  • 63フォーム IDに置き換えます

私が役に立つと思ったいくつかのリソース:

于 2013-03-01T20:49:22.877 に答える
2

現在受け入れられている回答は、ユーザーがフォームの前のページに移動しない場合にのみ機能し、移動した場合はgform_sourge_page_number常に 1 遅れます。より良い解決策を見つけました (例としてこのフックを使用しますが、$form が渡された任意のフック内で使用できるはずです):

function run_script_on_last_page( $form)  {
  if ( !is_admin() ) {
    if ( \GFFormDisplay::get_current_page( $form['id'] ) == 10) {
        wp_enqueue_script( 'custom_script', get_template_directory_uri() . '/js/custom_script.js', array( 'jquery' ), null, true );
    }
  }
}

add_action( 'gform_enqueue_scripts_63', 'run_script_on_last_page' );

GFFormDisplay::get_current_page( $form_id )ドキュメント化されていない多くの便利な関数の 1 つです。

于 2018-08-25T00:46:36.637 に答える
1

現在のページを返す小さな関数を書きました。

// Get Gravity Forms Current Page
// Syntax: gf_current_page()
function gf_get_current_page()
{
    return rgpost('gform_source_page_number_' . $_POST['gform_submit']) ? rgpost('gform_target_page_number_' . $_POST['gform_submit']) : 1;
}
于 2014-05-01T16:06:23.500 に答える
0

次のコードは JavaScript で機能します。

$('.gf_step_active .gf_step_number').html()

現在のページのページ番号が複数ページ形式で表示されます。

于 2019-03-13T01:42:09.987 に答える
0

これを使ってみてください:

var current_visible_page = jQuery('.gf_step_active .gf_step_number').html();
console.log(current_visible_page);

コンソールで上記の方法を使用して、それがどのように機能しているかを確認します。

于 2021-10-12T17:56:19.443 に答える