重力形式 - 在嵌入表单时将JS排队?

时间:2017-09-19 17:19:25

标签: javascript php wordpress gravity-forms-plugin

我希望只有在嵌入了一个表单(用短代码和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)存档方式?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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网址。

我现在在问题中使用钩子,它完美无缺。

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