
本文介绍如何精准触发 fancybox 模态框——仅在 wpforms 表单通过前端验证并完成 ajax 成功提交后打开,避免因表单未通过校验就提前弹窗的问题。
WPForms 提供了丰富的 JavaScript 事件钩子,其中 wpformsAjaxSubmitSuccess 是关键:它仅在表单通过所有客户端验证(如必填字段、邮箱格式等)且服务器端返回成功响应(HTTP 200 + JSON success: true)后触发。这完美契合“仅成功提交后弹窗”的需求,彻底规避了原始代码中监听原生 submit 事件导致的误触发问题。
以下为推荐实现方案(需确保 jQuery 和 Fancybox 已正确加载):
// 定义模态框打开逻辑
function openFormResp() {
new Fancybox([
{
src: '#modal-response',
type: 'inline',
// 可选:增强用户体验
on: {
init: () => console.log('Fancybox modal opened after successful submission'),
}
}
]);
}
// 使用 WPForms 官方 AJAX 成功事件监听(推荐)
(( $ ) => {
$(document).on('wpformsAjaxSubmitSuccess', 'form.wpforms-form', function (e, response) {
// 可选:根据响应内容做进一步判断(例如检查特定字段)
// if (response.data?.status === 'success') { ... }
openFormResp();
});
})(jQuery);✅ 关键说明与注意事项:
- ✅ 必须使用 $(document).on(...) 或 $('form.wpforms-form').on(...) 绑定事件,而非 addEventListener,因为 WPForms 的事件是通过 jQuery .trigger() 发布的;
- ✅ wpformsAjaxSubmitSuccess 事件自带 response 参数,包含完整的服务器返回数据(如 response.data.entry_id),可用于日志记录或后续逻辑;
- ⚠️ 确保 #modal-response 元素存在于 DOM 中,且在 Fancybox 初始化前已渲染(建议放在 底部或使用 DOMContentLoaded 保障);
- ⚠️ 若网站启用了 WPForms 的「禁用 AJAX 提交」选项,请先在 WPForms → Settings → General 中启用 AJAX(默认开启);
- ? 如需兼容非 AJAX 提交(极少见),可额外监听 wpformsSubmitSuccess(页面跳转场景),但本例聚焦标准 AJAX 流程。
该方案简洁、健壮、符合 WPForms 最佳实践,真正实现“验证通过 → 提交成功 → 弹窗反馈”的闭环体验。









