我正在使用联系人表格7和Flamingo在我的Wordpress网站上创建一份顾问注册表格。根据我的客户要求,每次提交都需要一个注册码(reg\\U代码),它是提交日期和随机数的组合,以使其唯一。
因此,我在CF7代码中添加了一个id为“reg\\u code”的隐藏输入字段。在我的第一次尝试中,我使用JS在用户访问我的站点后立即生成一个“reg\\u code”变量,并将隐藏字段值设置为生成的“reg\\u code”变量。“注册码”已成功保存到CF7提交中,但在某些情况下,当用户在第一次访问时未提交表单,但几天后,其“注册码”中的日期部分将不正确,因为该代码是在首次访问时生成的,并缓存在浏览器中。
为了避免这个问题,我决定将“reg\\u code”生成函数从JS移到PHP,过程如下:
单击提交按钮,使用AJAX调用返回reg\\U代码的PHP函数,将CF7值中的隐藏字段“reg\\U代码”设置为返回的结果,真正执行CF7提交,将所有CF7字段保存到Flamingo,这是我的JS在CF7提交事件之前触发AJAX调用:
$(\'.wpcf7-form\').on(\'submit\', function (e) {
$.ajax({
type: "post",
dataType: "json",
url: js_object.ajax_url,
data: {
action: "custom_reg_code",
},
success: function (response) {
if (response.success) {
$(\'#reg_code\').val(response.data)
}
else {
console.log(\'Something wrong\')
}
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(\'fail: \' + textStatus, errorThrown);
},
complete: function() {
}
})
})
我的结果是:它只在某些时候起作用。只有一些提交具有“reg\\U代码”值,其他一些提交具有空的“reg\\U代码”。我猜,CF7提交事件不会等待AJAX调用完成。我试图添加e.preventDefault() 向上面的代码停止默认的CF7提交,但没有成功。我还尝试了CF7 eventListener“wpcf7submit”,但仍然没有成功。
最后,问题是:有没有办法暂停默认的CF7提交事件来修改输入字段值,然后继续提交过程?
非常感谢你