AJAX 加载后在 Contact Form 7 上启用 AJAX
Enabling AJAX on Contact Form 7 Form after AJAX Load
我试过搜索,但关于如何AJAX 加载 page/form 只有 returns 个结果。
我正在做的是通过 AJAX(联系表格 7)加载表格,我想知道如何在该表格上重新启用 AJAX 提交。 CF7 有这种可能性吗?
过去三个小时我一直在寻找这个问题的解决方案,但我只找到了没有答案的问题,但我想我找到了解决方案,希望这能帮助你和其他解决这个问题的人。
在我的例子中,我试图将 CF7 表单嵌入到带有 PrettyPhoto 的内联灯箱中(但我认为这与 Fancybox 等其他灯箱相同)。我的问题是这些内联灯箱可以通过 AJAX 在灯箱内生成内容,而 CF7 脚本是在该内容之前加载的,因此 AJAX 提交表单无效。
我所做的是通过 jQuery.get 在打开 prettyphoto 灯箱时触发的事件中获取 CF7 脚本。在您的情况下,我认为您应该在通过 AJAX 生成内容后立即执行此操作,例如:
jQuery.get("/wp-content/plugins/contact-form-7/includes/js/jquery.form.min.js?ver=3.51.0-2014.06.20");
jQuery.get("/wp-content/plugins/contact-form-7/includes/js/scripts.js?ver=4.1.1");
确保您的路径和版本相同,否则更改它们。
这将刷新表单并重新启用 AJAX 提交。
希望对您有所帮助!
Contact Form 7 调用一个初始化函数,该函数在页面加载时执行。如果您的表单使用 AJAX 加载,您应确保在加载表单后调用该函数。
调查:
plugins/contact-form-7/includes/js/scripts.js
对于函数的定义wpcf7InitForm
.
编辑:
每次调用此函数都会插入一个新的加载徽标。不幸的是,我找不到比使用 jQuery:
从 DOM 中删除重复加载程序更好的解决方案
function initContactForm() {
jQuery('div.wpcf7 > form').wpcf7InitForm();
jQuery('form.wpcf7-form')
.each(function() {
$j(this).find('img.ajax-loader').last().remove();
});
}
wpcf7 的 4.8 版改变了这种行为。从那以后电话会是
wpcf7.initForm( jQuery('.wpcf7-form') );
虽然它不再需要 jQuery,但您也可以传递一个节点..
像这样(可以有多种形式..)
var wpcf7_form = document.getElementsByClassName('wpcf7-form');
[].forEach.call(wpcf7_form, function( form ) {
wpcf7.initForm( form );
});
它仍然写在jQuery中,但它不必在您的函数中处于活动状态(即jQuery.ready())才能运行。加上它摆脱了 jQuery.form
无法通过 ajax 发送带有上述评论的表格。我不得不使用 wpcf7.submit
方法与 wpcf7.init
用法示例:
wpcf7.submit(document.querySelector('.wpcf7-form'));
5.4以上版本使用以下代码:
document.querySelectorAll(".wpcf7 > form").forEach((
function(e){
return wpcf7.init(e)
}
)
);
将此放入您的 ajax 回复中。这将重新初始化所有表单
我试过搜索,但关于如何AJAX 加载 page/form 只有 returns 个结果。 我正在做的是通过 AJAX(联系表格 7)加载表格,我想知道如何在该表格上重新启用 AJAX 提交。 CF7 有这种可能性吗?
过去三个小时我一直在寻找这个问题的解决方案,但我只找到了没有答案的问题,但我想我找到了解决方案,希望这能帮助你和其他解决这个问题的人。
在我的例子中,我试图将 CF7 表单嵌入到带有 PrettyPhoto 的内联灯箱中(但我认为这与 Fancybox 等其他灯箱相同)。我的问题是这些内联灯箱可以通过 AJAX 在灯箱内生成内容,而 CF7 脚本是在该内容之前加载的,因此 AJAX 提交表单无效。
我所做的是通过 jQuery.get 在打开 prettyphoto 灯箱时触发的事件中获取 CF7 脚本。在您的情况下,我认为您应该在通过 AJAX 生成内容后立即执行此操作,例如:
jQuery.get("/wp-content/plugins/contact-form-7/includes/js/jquery.form.min.js?ver=3.51.0-2014.06.20");
jQuery.get("/wp-content/plugins/contact-form-7/includes/js/scripts.js?ver=4.1.1");
确保您的路径和版本相同,否则更改它们。
这将刷新表单并重新启用 AJAX 提交。
希望对您有所帮助!
Contact Form 7 调用一个初始化函数,该函数在页面加载时执行。如果您的表单使用 AJAX 加载,您应确保在加载表单后调用该函数。
调查:
plugins/contact-form-7/includes/js/scripts.js
对于函数的定义wpcf7InitForm
.
编辑: 每次调用此函数都会插入一个新的加载徽标。不幸的是,我找不到比使用 jQuery:
从 DOM 中删除重复加载程序更好的解决方案function initContactForm() {
jQuery('div.wpcf7 > form').wpcf7InitForm();
jQuery('form.wpcf7-form')
.each(function() {
$j(this).find('img.ajax-loader').last().remove();
});
}
wpcf7 的 4.8 版改变了这种行为。从那以后电话会是
wpcf7.initForm( jQuery('.wpcf7-form') );
虽然它不再需要 jQuery,但您也可以传递一个节点.. 像这样(可以有多种形式..)
var wpcf7_form = document.getElementsByClassName('wpcf7-form');
[].forEach.call(wpcf7_form, function( form ) {
wpcf7.initForm( form );
});
它仍然写在jQuery中,但它不必在您的函数中处于活动状态(即jQuery.ready())才能运行。加上它摆脱了 jQuery.form
无法通过 ajax 发送带有上述评论的表格。我不得不使用 wpcf7.submit
方法与 wpcf7.init
用法示例:
wpcf7.submit(document.querySelector('.wpcf7-form'));
5.4以上版本使用以下代码:
document.querySelectorAll(".wpcf7 > form").forEach((
function(e){
return wpcf7.init(e)
}
)
);
将此放入您的 ajax 回复中。这将重新初始化所有表单