php - Recaptcha v3 不工作 - 表单不提交
问题描述
我正在尝试在 CakePHP 3.x 中实现 recaptcha v3。我的模板页面如下所示:
<?php $this->start('script'); ?>
<script src="https://www.google.com/recaptcha/api.js"></script>
<script type="text/javascript">
function registerSubmit(token) {
document.getElementById("register").submit();
}
</script>
<?php $this->end(); ?>
...
<?php echo $this->Form->create($user, [ 'id' => 'register', 'name' => 'register']) ?>
...
<button type="submit"
data-sitekey="<?php echo Configure::read('Captcha.site')?>"
data-callback='registerSubmit'
data-action='submit'
class="g-recaptcha btn btn-lg btn-secondary text-uppercase">Get Started</button>
<?php echo $this->Form->end(); ?>
据我所知,registerSubmit
调用永远不会被执行,我的表单也没有提交——为什么?
解决方案
我怀疑问题是您在表单中有一个 ID 为“提交”的按钮。表单中具有名称或 id 的任何元素都会反映在具有该名称的表单属性中。所以如果你有一个元素<input id="elephants"/>
,表单对象将有一个“大象”属性。在这种情况下,提交按钮可以通过 form.submit 访问,但这掩盖了 submit() 函数。您可以通过在 registerSubmit() 函数的开头添加警报来测试这一点。我相信警报会被执行,然后 submit() 调用将无法运行提交按钮,因为它不是一个函数。
如果一个表单控件(例如一个提交按钮)有一个提交的名称或id,这个方法将屏蔽表单的提交方法。
推荐阅读
- angular - 如何在 Ionic 中为 Android 创建后台服务?
- mysql - 列表中的 MySQL 映射
- oracle - 删除触发器后有什么问题?
- java - 创建名为“cassandraSession”的 bean 时出错,连接到 docker 上的 cassandra
- r - 调整ggplot2中的指南位置
- python - 如何在 Python 中拆分/切片列表
- ios - 我应该如何从 Firestore 保存/加载当前用户的数据而不阻止新视图控制器的呈现?
- qt - QML 用户控件中的双向绑定
- html - 创建动画搜索图标
- c - 架构 x86_64 的未定义符号:“xxx”,引用自:_main