Gravity Forms - 嵌入表单时使 JS 排队?

Gravity Forms - Enqueue JS when form embedded?

我希望仅在嵌入表单(嵌入短代码和 php 时)才能将某些 JavaScript 入队。

Gravity Forms 是否有一个在嵌入表单时触发的动作挂钩?然后我可以做这样的事情。

add_action('some_gforms_hook', function() {
    add_action('wp_enqueue_scripts', function() {
        wp_enqueue_script( 'postcode', get_bloginfo('stylesheet_directory') . '/modules/Postcode/assets/js/postcode.js', array('jquery') );
        wp_localize_script( 'postcode', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
    });
});

如果没有这样的钩子,是否有另一种(非 hacky)方式来归档我想要的东西?

我在文档中找到了这个例子。

add_action( 'gform_register_init_scripts', 'gform_format_money' );
function gform_format_money( $form ) {

    $script = '(function($){' .
        '$('.gf_money input').each(function(){' .
            '$(this).val(gformFormatMoney($(this).val()));' .
        '}).change(function(){' .
            '$(this).val(gformFormatMoney($(this).val()));' .
        '});' .
    '})(jQuery);';

    GFFormDisplay::add_init_script( $form['id'], 'format_money', GFFormDisplay::ON_PAGE_RENDER, $script );
}

这个例子的问题是我不喜欢在我的 PHP 文件中编写的 JS,并且 add_init_script() 函数需要一个带有 JS 的字符串作为参数。

我可以使用 file_get_contents() 从文件中获取 JS,但是我将无法本地化用于注入 AJAX url.

的脚本

我现在使用问题中的钩子,效果很好。

add_action( 'gform_register_init_scripts', function() {
    add_action('wp_enqueue_scripts', function() {
        wp_enqueue_script( 'postcode', get_bloginfo('stylesheet_directory') . '/modules/Postcode/assets/js/postcode.js', array('jquery') );
        wp_localize_script( 'postcode', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
    });
});

您正在寻找 gform_enqueue_scripts。它传递 $form 对象,以便您确定是否应为给定表单加载脚本。