首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重力将jQuery.load转化为模态

重力将jQuery.load转化为模态
EN

WordPress Development用户
提问于 2013-07-18 13:02:52
回答 1查看 3.5K关注 0票数 1

我有一个重力形式的联系形式,驻留在一个页面上,但我想要的是一个网站范围的链接,将打开该形式,并显示在一个模式,在飞行。

要做到这一点,一种方法是将表单插入模板端的标记中,以便它已经存在于每个页面上。但这意味着有大量的标记和gf脚本正在加载,而大多数情况下这些脚本并不需要加载。

因此,我把一些js放在一起,从页面抓取表单标记并将其插入DOM中,加载脚本,然后在twitter引导模式中显示结果。

表示方面的工作与预期相同,但js、条件逻辑等没有一个得到应用。我知道当我把每个脚本的状态输入到console.log中时,js正在加载-而且我得到了"200“并且没有错误。但这就像脚本看不到表单,或者没有被正确实例化一样。

为了测试js端,我还尝试通过以下方法手动将资源加载到头中:

代码语言:javascript
复制
<?php gravity_form_enqueue_scripts(1, true); ?>

但这也行不通。

下面是我正在使用的js,有谁有任何想法,如何让这个激发生命的形式?我应该用的是回调吗?

事先非常感谢-本

代码语言:javascript
复制
jQuery(document).ready(function(){
// load contact form with ajax
jQuery(".contact_btn").click(function(){
    jQuery.ajaxSetup ({ cache:false });
    var ajax_load = "<img height='50px' width='50px' src='/assets/img/medloading.gif' class='tr_spinner' alt='loading...' style='align:center, top:50%' />";
    var loadUrl = "/contact-3/";
    // load the scripts dynamically
    jQuery.when(
        jQuery.getScript("/plugins/gravityforms/js/gravityforms.js?ver=1.7.6", function(data, textStatus, jqxhr) {console.log(jqxhr.status);}), // console logs to get confirmation that its loaded
        jQuery.getScript("/plugins/gravityforms/js/conditional_logic.js?ver=1.7.6", function(data, textStatus, jqxhr) {console.log(jqxhr.status);}),
        jQuery.getScript("/plugins/gravityforms/js/datepicker.js?ver=1.7.6", function(data, textStatus, jqxhr) {console.log(jqxhr.status);}),
        jQuery.getScript("/plugins/gravityforms/js/jquery.textareaCounter.plugin.js?ver=1.7.6", function(data, textStatus, jqxhr) {console.log(jqxhr.status);}),
        jQuery.getScript("/plugins/gravityforms/js/jquery.maskedinput-1.3.min.js?ver=1.7.6", function(data, textStatus, jqxhr) {console.log(jqxhr.status);})
    ).then(function(){
    // insert the content into the DOM
    jQuery("#contact-form .modal-body").html(ajax_load).load(loadUrl + " .entry-content");
    // load it in the modal
    jQuery("#contact-form").modal({ keyboard: false, show: true, backdrop: true });
    });
    // hijack the <a> link
    return false;
});
});
EN

回答 1

WordPress Development用户

发布于 2013-07-21 21:14:58

我最终得到了开发团队的回应,他们认为iframe是最好的方法:

看上去这是个时间问题。在文档已经加载之后,您的表单将被加载到DOM中,因此这将是一个问题。老实说,考虑到重力形式中的所有JS复杂性,我不确定您是否能够让它工作起来。我会认真考虑使用iframe代替。

在返回此响应所需的时间中,我发现我使用[.load()][1]导入的div丢失了原始内容中的所有脚本元素。这是因为,虽然没有明确的记录, .load()删除了任何内联脚本,所以当标记存在时,没有发生任何激活好的事情。

一种解决方案(有效)是通过查看页面源将内联脚本中的内容打包,并将其打包到js文件中,然后通过[jQuery.getScripts()][3]调用加载该文件。除了去掉<script></script>元素之外,您还可能希望修改任何路径,以便它们相对于减轻迁移问题。

这里的(主要)缺点是,通过自己打包这个脚本,它不再从后端获取参数,并且在对表单进行更改时很可能会中断。它还引入了几个浏览器检测实例。

由于这些限制,并且没有一个动态生成这些脚本的方法,iframe实际上是可行的。尽管如此,毫无疑问,创建一个输出脚本的自定义类是可能的--它很大程度上需要从form_display.php的内容中重构,因为所需的大部分内容都被锁在私有函数下。到目前为止,我还没有找到任何证据来搜查任何试图这样做的人。

票数 1
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/106989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档