我想查看提交的地址是否有正确的地址然后发送电子邮件。我的代码工作但我希望在7次验证联系后执行我的代码。如果我的代码返回true,则表单将提交并发送电子邮件,否则显示警告,不应提交。
$('.wpcf7-submit').on('click', function (e) {
var address = $('input[name="your-address"]').val();
//e.preventDefault();
if(city !=="") {
jQuery.post(gs_cf7_url, {data:address, action:'gs_cf7_check_lat_lag'}, function (response){
if(response=="no") {
alert('Sorry we couldnt find the location');
} else {
//$(".wpcf7-submit").unbind("submit").submit();
//$(".wpcf7-submit").unbind("submit");
}
});
}
});
如果有任何javascript钩子,我正在寻找add_action('wpcf7_before_send_mail', 'save_form');
之类的钩子?
答案 0 :(得分:0)
Contact From 7的逻辑如下。在提交点击它点击ajax,在PHP代码中执行所有验证并返回到js内部函数$ .wpcf7AjaxSuccess = function(data,status,xhr,$ form)。此函数检查data.invalids,如果为true,则显示错误消息。
这意味着在联系表单7验证后执行检查为时已晚,因为当php代码接受所有数据有效时,它会发送电子邮件并将控制权返回给$ .wpcf7AjaxSuccess。
作为一种变通方法,您可以在CF7中标记地址字段,在您的字段上监视.focusout()事件(输入[name =“your-address”])并在输入的地址无效时清除它。提交点击后,CF7将不会发送电子邮件,并且需要您的字段。
尝试以这种方式更改代码:
$('input[name="your-address"]).focusout( function () {
var address = $('input[name="your-address"]').val();
//e.preventDefault();
if(city !=="") {
jQuery.post(gs_cf7_url, {data:address, action:'gs_cf7_check_lat_lag'}, function (response){
if(response=="no") {
alert('Sorry we couldnt find the location');
$('input[name="your-address"]').val('');
} else {
//$(".wpcf7-submit").unbind("submit").submit();
//$(".wpcf7-submit").unbind("submit");
}
});
}
});
我没有检查它,因为我没有其他代码片段(gs_cf7_check_lat_lag),所以请将其视为如何制定解决方法的想法。