联系表格 7 AJAX 回调

Contact Form 7 AJAX Callback

我已经为此搜索了一段时间,但无法提供任何文档来概述我想要实现的目标。

我正在使用 wordpress 和 Contact Form 7 插件,一切正常,我想要实现的是 run 一些特定的 javascript 在表单提交时,我知道我们可以使用"on_sent_ok:" 在附加设置中,但这仅在实际提交表单时执行。

我想做的是在表单未正常提交时执行其他操作 javascript,这会使用户返回到未验证的部分。

我可以在点击表单提交 1.7 秒后使用以下代码 run,但是它有点草率,好像用户 run 连接速度慢,有潜力这可能 run 在表单正确提交之前。

 $('.wpcf7-submit').click(function() {
setTimeout(function() {
    if ($('.fs1 input,.fs1 textarea').hasClass('wpcf7-not-valid')) {
        $('.pop-up-form').removeClass('pustep2').removeClass('pu-closing');
        $('.form-step').hide();
        $('.fs1').show();

    }
    if ($('.fs2 *').hasClass('wpcf7-not-valid')) {
        alert('error on page 2 - take user back to the area with issues')
    }
}, 1700);
});

当表单 AJAX 完成后,是否有任何特定的函数或钩子可以用于 run JS?

谢谢!

在版本 3.3 中引入了新的 jQuery 自定义事件触发器:

New: Introduce 5 new jQuery custom event triggers

  • wpcf7:无效
  • wpcf7:垃圾邮件
  • wpcf7:邮件发送
  • wpcf7:邮件失败
  • wpcf7:提交

您可以像下面的例子那样使用wpcf7:invalid

$(".wpcf7").on('wpcf7:invalid', function(event){
  // Your code here
});

有时它可能不起作用,正如 Martin Klasson 指出的那样,只有 'submit' 事件起作用,最有可能的原因是它由表单触发并冒泡到所选对象。另外据我所知,现在事件有其他名称,如 "invalid.wpcf7"、"mailsent.wpcf7" 等。简而言之,这应该有效:

jQuery('.wpcf7').on('invalid.wpcf7', function(e) {
    // your code here
});

这里有更详细的解释:

考虑到关于这个主题的各种回应,插件开发人员似乎改变了他们对每 5 分钟应该如何工作的想法。目前(2017 年第一季度)这是工作方法:

document.addEventListener( 'wpcf7mailsent', function( event ) {
  alert( "Fire!" );
}, false );

有效事件是:

  • wpcf7invalid — Ajax 表单提交完成时触发 成功,但邮件还没有发送,因为有字段 输入无效。
  • wpcf7spam — 当 Ajax 表单提交有 已成功完成,但邮件尚未发送,因为可能 已检测到垃圾邮件 activity。
  • wpcf7mailsent — Ajax 时触发 表单提交已成功完成,邮件已发送。
  • wpcf7mailfailed — Ajax 表单提交完成时触发 成功,但发送邮件失败。
  • wpcf7submit — 触发 当 Ajax 表单提交成功完成时,无论 其他事件。

酱汁:https://contactform7.com/dom-events/

我在这方面做了很多努力,我发现只有 Submit 事件有效时,这意味着您的主题中存在 js 问题/冲突。

如果它是您构建的自定义主题,请确保 jQuery 和 jQuery migrate 都按此顺序加载,并且 Contact form 7 js 也在页脚中加载。

确保您的 php 模板中有 wp_headwp_footer

要使 DOM 事件起作用,您的表单必须处于 Ajax 模式。如果页面在提交时重新加载,请忽略 DOM 事件。如果您的表单 ID 显示在 URL 中,同样如此。我的表单最初未处于 Ajax 模式,因为未加载 Contact Form JS,并且 jQuery 迁移。

为了正确触发 DOM 事件,表单必须表现得 exactly like shown on this page。一旦你有了它,它应该可以工作了。

我已经用 jQuery 3.3.1 和 Migrate 3.0.1 测试了这个,下面的事件监听器起作用了:

document.addEventListener( 'wpcf7mailsent', function( event ) {
    console.log('mail sent OK');
    // Stuff
}, false ); 

要检查您的主题是否是罪魁祸首,请使用 Wordpress 的默认主题测试您的表单,如果有效,您就知道问题出在您这边,而不是在开发人员的文档中!

此代码从 5.8.x 版本开始有效:

$('.wpcf7').on('wpcf7invalid wpcf7spam wpcf7mailsent wpcf7mailfailed', function () {  
   // your code here
});