невидимая форма отправки резюме перед получением данных - PullRequest
0 голосов
/ 10 декабря 2018

Я использую камень recaptcha.Rails 5.2.

У меня есть следующая форма:

= 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:


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

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

Я проверяю значение из recaptchaв моем контроллере следующим образом:

  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 и вижу в параметрах, которые attriburte recaptcha отправляет в пустых данных.

Я не понимаю, зачем мне это нужно, поскольку ни одна из документации не указываетЭто.Так что я делаю что-то не так, но не могу понять.

Кто-нибудь может увидеть, как я могу это исправить?

1 Ответ

0 голосов
/ 13 декабря 2018

Вам нужен оператор e.preventDefault(), иначе форма будет отправлена ​​до того, как recaptcha выполнит обратный вызов.

Это происходит потому, что <button> без атрибута type имеет submit в качестве значения / поведения по умолчанию.Если вы посмотрите документацию recaptcha , у тега <button> есть атрибут type , определенный как button, с которым поведение не связано, поэтому при нажатии на него не происходит никаких действий.

Возвращаясь к вашему делу, вы либо сохраняете инструкцию e.preventDefault(), либо устанавливаете атрибут type как button:

.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'
...