重力表单添加显示无

时间:2013-06-23 10:58:52

标签: css wordpress wordpress-plugin wordpress-theming gravity-forms-plugin

我正在我的WordPress主题中创建一个自定义模板,因为我的模板是一个完全不同于我的活动主题的模板,模板有自己的标题&页脚和内部我分别正确地声明了wp_head();wp_footer();

在我的模板代码中,我尝试使用do_shortcode显示重力形式,但没有显示任何表单。当我检查该区域时,我可以看到表单代码,但style="display:none" div中添加了.gform_wrapper

再补充一点,重力表单在我的网站的其余部分(使用活动主题的所有页面/帖子)中都能正常运行,我的自定义模板上只有问题。

非常感谢任何建议。

由于

15 个答案:

答案 0 :(得分:21)

虽然这是一个老问题,但在我搜索这个问题时它仍然首先出现,所以我添加了我的解决方案,以防其他人也在搜索。如果您的主题通过在functions.php中包含以下一行或多行代码将脚本移动到页脚(通常是出于性能原因而推荐):

remove_action('wp_head', 'wp_print_scripts'); 
remove_action('wp_head', 'wp_print_head_scripts', 9);
add_action('wp_footer', 'wp_print_scripts', 5);
add_action('wp_footer', 'wp_print_head_scripts', 5);

您还需要将Gravity Forms脚本移动到页脚,因此它们会在jQuery之后调用。您可以通过将以下代码添加到主题的functions.php文件中来完成此操作:

add_filter('gform_init_scripts_footer', 'init_scripts');
function init_scripts() {
    return true;
}

答案 1 :(得分:5)

这是因为您在表单上使用了条件逻辑。无论何时出现条件逻辑,整个表单都设置为display:none;然后javascript用于仅显示应显示的字段。

然而,这需要Gravity Forms能够使用内置入队函数的WordPress输出必要的Javascript ...它会在您的页脚中输出Javascript。

您的主题可能没有在您的主题的footer.php文件中调用此函数:

<? php wp_footer(); ?>

这个函数调用,所有主题应该具有(但很多人忘记包含),使插件能够动态地在主题的页脚中输出代码。如果它不存在,主题就无法输出必要的代码。

这很可能是您的表单无法正常显示的原因。

回答:http://www.gravityhelp.com/question/why-is-there-a-style-attribute-of-displaynone-being-added-my-form-isnt-showing-up/

答案 2 :(得分:2)

我终于开始工作了。

要使条件逻辑起作用,必须取消注册WordPress附带的jQuery,必须在头文件中加载1.8.3并且gravityforms.min.js,conditional_logic.min.js和jquery.maskedinput.min.js必须是在页脚中加载:

<?php
 function modify_jquery_version() {
 if (!is_admin()) {
     wp_deregister_script('jquery');
     wp_register_script('jquery',
     'https://code.jquery.com/jquery-1.8.3.min.js', false, '1.8.3');
     wp_register_script('migrate',
     'https://code.jquery.com/jquery-migrate-1.4.1.min.js', false, '1.4.1');

     wp_enqueue_script('jquery');
     wp_enqueue_script('migrate');
     }
 }
 add_action('wp_enqueue_scripts', 'modify_jquery_version');

 function footer_load() {
 if (!is_admin()) {
wp_enqueue_script('gravity','/wp-content/plugins/gravityforms/js/gravityforms.min.js','','',true);
wp_enqueue_script('conditional','/wp-content/plugins/gravityforms/js/conditional_logic.min.js','','',true);
wp_enqueue_script('masked','/wpcontent/plugins/gravityforms/js/jquery.maskedinput.min.js','','',true);
    }
}

 add_action('wp_enqueue_scripts', 'footer_load');
?>

答案 3 :(得分:1)

我的WP主题是调用旧版本的jQuery(由Google托管),这导致display:none属性应用于我的Gravity Forms。我将enqueue脚本更新为最新版本的jQuery,并解决了这个问题。

答案 4 :(得分:1)

我也有这个问题,实际的解决方案是添加    gravity_form_enqueue_scripts($form_id) 到你的header.php文件。

来自Gravity表格支持文档本身:https://www.gravityhelp.com/documentation/article/embedding-a-form/#enqueue-scripts-and-styles

答案 5 :(得分:0)

我能够解决我的问题,只需停用名为Autoptimize的插件,该插件可优化连接CSS和JavaScript代码并压​​缩它的网站。

一旦找到它就非常明显。

答案 6 :(得分:0)

我刚才遇到了这个问题。

两个问题:这个旧主题使用的是jQuery 1.5.1,它捆绑的所有插件都是为旧的jQuery编写的。 Gravity Forms中的条件逻辑由于旧的jQuery版本而无法工作,因为我重命名了一个条件逻辑字段。

删除/修复一些不正确的条件逻辑下拉列表,并在网站上升级jQuery版本后,事情又开始起作用了。

答案 7 :(得分:0)

此问题可能是由页面上的任何其他脚本引发错误引起的。检查控制台以确保没有损坏的脚本

答案 8 :(得分:0)

对我来说,原因是FireFox中的控制台错误与:

有关
jQuery(document).bind('gform_post_render', function(ev){
     console.log(event, ev);
});

答案 9 :(得分:0)

就我而言,我认为原因是: 我将Gravity短代码放入了(也许它检测到并在其iframe中插入了“显示:无”?)

Dim arrayVar(1 to 4) As String
arrayVar(1)="hi "
arrayVar(2)="there "
arrayVar(3)="what's "
arrayVar(4)="up."

For i=1 to 4
    output=output & arrayVar(i)
Next

MsgBox(output)

框架代码:

<div id="layer_2" style="display: none">
[gravityform id=123 title=false ajax=true]
</div>

由于我从div中删除了“ display:none”,因此Gfrom可以正常工作。比将脚本添加到页面:

<iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_16' id='gform_ajax_frame_16'></iframe>

但是!即使没有上面的JS代码,Gform也可以在“ iframe style = display:none”下正常工作。 真正的原因是:缺少一个“

jQuery(document).ready(function() { jQuery("#_layer_2").attr("style", "display: none"); });

”。

答案 10 :(得分:0)

作为临时修复,我将此添加到 <theme_dir>/footer.php,就在 </body></html> 之前:

<script>
jQuery('.gform_wrapper').show();
</script>

这将告诉 jQuery 显示所有带有 .gform_wrapper 类的 div。

我已经尝试在此处移动 wp_footer(); 以及所有其他建议。和其他网站。没有任何效果。我还尝试禁用缓存、清除缓存、删除插件等。没有 JS 错误。未显示任何表单。

我注意到的一件事是只有在满足两个条件时才会出现问题:

  1. 用户未登录。
  2. 表单使用条件逻辑。

如果两者中的任何一个都不存在,则表单加载正常。

我会在找出发生这种情况的原因后在此处添加更多信息。

编辑:

主要问题是 DOMContentLoaded 没有被触发。如果不是所有的 http 请求都完成(比如待处理的 css、js、图像等),就会发生这种情况。以下代码(从 https://stackoverflow.com/a/49724894/1582649 借用)强制事件并显示表单。

window.document.dispatchEvent(new Event("DOMContentLoaded", {
  bubbles: true,
  cancelable: true
}));

我仍然不知道为什么会发生这种情况,因为控制台中没有显示待处理的请求。一切似乎都在正确加载。我试图将整个站点复制到另一台服务器,它在那里工作。这让我认为这与主机提供商有关。也许某种缓存。

现在,我将把那段代码放在 <theme>/footer.php 的末尾。

答案 11 :(得分:0)

就我而言,解决方案非常简单:我只是停用了 Enable jQuery Migrate Helper 插件。就是这样。

答案 12 :(得分:-1)

您是否尝试从style="display:none" div中删除.gform_wrapper?或者改成它 style="display:block"

答案 13 :(得分:-1)

我不认为这会有所帮助,但也许可以试试这个:

.gform_wrapper{
   display:block !important;
}

我知道内联样式会覆盖任何样式表,但!important帮助我覆盖了一些插件样式。

还尝试在插件文件中搜索style="display:none"。使用Textwrangler或其他编辑器,您可以在其中搜索多个文件。这对编辑主题和插件也有很大帮助。

答案 14 :(得分:-2)

是&#34;显示:无&#34;为.gform_wrapper类本身设置?然后只需在Gravity Forms的css文件中更改它。

但是,包装器可能具有ID或其他类,可以设置display:none。

最后但并非最不重要的是,包装器可能存在破坏的jQuery动画,这可能是它保持隐藏的原因。