首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取数据前提交不可见的recaptcha表单

获取数据前提交不可见的recaptcha表单
EN

Stack Overflow用户
提问于 2018-12-10 11:36:40
回答 1查看 791关注 0票数 5

我正在使用recaptcha gem。Rails 5.2。

我有以下表格:

代码语言:javascript
复制
= simple_form_for @quote_request_form, url: quote_requests_path, html: {id: "invisible-recaptcha-form"} do |f|
  .form-group
    = f.input :name, label: false, placeholder: 'First and Last Name', 
  .form-group.actions.mt-5
    button.btn.btn-primary.btn-lg.btn-block#submit-btn Submit
  = invisible_recaptcha_tags ui: :invisible, callback: 'submitInvisibleRecaptchaForm'

我为表单添加了以下javascript:

代码语言:javascript
复制
javascript:


  document.getElementById('submit-btn').addEventListener('click', function (e) {
      e.preventDefault();
      grecaptcha.execute();
  });

  var submitInvisibleRecaptchaForm = function () {
    document.getElementById("invisible-recaptcha-form").submit();
  };

我在控制器中检查来自recaptcha的值,如下所示:

代码语言:javascript
复制
  if verify_recaptcha(model: @quote_request_form) && @quote_request_form.save
    redirect_to quote_confirm_path, notice: "Your quotation request is being processed"
  else
    render :new
  end

只要我使用e.preventDefault();行,它就能正常工作。如果我删除这一行,我会得到一个失败的recaptcha,并且我可以在参数中看到recaptcha属性正在发送空白数据。

我不明白为什么我需要它,因为文档中没有指定它。所以我做错了什么,但是我找不到答案。

有没有人知道我能怎么解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-13 05:59:00

您需要e.preventDefault()语句,否则表单将在recaptcha执行回调之前提交。

这是因为没有类型属性的将submit作为默认值/行为。如果查看recaptcha documentation,就会发现<button>标记的类型属性被定义为button,它没有关联任何行为,因此在单击它时不会发生任何操作。

返回到您的情况,要么保留e.preventDefault()语句,要么将类型的属性设置为button

代码语言:javascript
复制
.form-group.actions.mt-5
   button.btn.btn-primary.btn-lg.btn-block#submit-btn type="button" Submit
 = invisible_recaptcha_tags ui: :invisible, callback: 'submitInvisibleRecaptchaForm'
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53699173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档