仅在 JavaScript/jQuery 中触发提交按下 BUT 时才显示的 Recaptcha?

Recaptcha that only shows when submit pressed BUT is triggered in JavaScript/jQuery?

我有一个用于客户表单的 Recaptcha,他们只希望在单击提交按钮时显示 Recaptcha。

但提交按钮只有在所有输入字段都已填写时才可点击,他们希望在字段为空且单击按钮时显示工具提示。

如您所想,这意味着当有空字段时我无法禁用按钮,因为我需要一个 .click() 事件。但是,我无法将 recaptcha 绑定到按钮,因为它会自动触发所以我不得不做一个不可见的 recaptcha,其中 div 具有 data-sitekey 属性和 g-recaptcha class.

所以我需要知道如何通过 JavaScript 触发 recaptcha 事件并使其具有与绑定到按钮相同的结果。

如果需要更多信息,请告诉我。

编辑:

var fieldsFilled = false;

    if(screen.width <= 767) {
        $('#fbForm2').find('input, textarea').each(function () {
            $(this).keyup(function () {
                fieldsFilled = checkFormFieldsEmpty('#fbForm2') && $('#terms').is(":checked");

                if(fieldsFilled) {
                    $("#btnSubmit").css("pointer-events","auto");
                } else {
                    $("#btnSubmit").css("pointer-events","none");
                }
            });
        });

        $('#terms').change(function () {
            fieldsFilled = checkFormFieldsEmpty('#fbForm2') && $('#terms').is(":checked");

            if(fieldsFilled) {
                $("#btnSubmit").css("pointer-events","auto");
            } else {
                $("#btnSubmit").css("pointer-events","none"); 
            }
        });
    } else {
        $('#fbForm').find('input, textarea').each(function () {
            $(this).keyup(function () {
                fieldsFilled = checkFormFieldsEmpty('#fbForm') && $('#terms').is(":checked");

                if(fieldsFilled) {
                    $("#btnSubmit").css("pointer-events","auto");
                } else {
                    $("#btnSubmit").css("pointer-events","none");
                }
            });
        });

        $('#terms').change(function () {
            fieldsFilled = checkFormFieldsEmpty('#fbForm') && $('#terms').is(":checked");

            if(fieldsFilled) {
                $("#btnSubmit").css("pointer-events","auto");
            } else {
                $("#btnSubmit").css("pointer-events","none"); 
            }
        });
    }

    //Checks if the form id has blank text fields
    function checkFormFieldsEmpty(id) {
        $(id).find('input, textarea').each(function () {
            //Check whether the input/textarea is blank
            if(!$(this).val()) {
                //If the input/textarea is empty return false
                return false;
            }
        });

        return true;
    }

    $('#btnSubmit').tooltip();

    $(document).on('click', '#btnSubmit', function (event) {
        if($('#btnSubmit').hasClass('disabled')) {
            $('#btnSubmit').tooltip({
                animation: false,
                delay: {show: 500, hide: 100},
                placement: 'right',
                text: 'Invalid input fields',
            });
        } else {
            grecaptcha.render('recaptchaField', {
                'sitekey' : '6LfDBGcUAAAAABnYRk1ZQkapzCs8c1Rr2ZARMchF',
                'callback' : onSubmit, 
            });
            grecaptcha.execute(widgetId);
        }
    });
    //-----------------------------------------------------------------------------------------

//recaptcha
var onSubmit = function (token) {
    if (screen.width >= 768) {
         document.getElementById("fbForm").submit();
    }else if (screen.width <= 767){
         document.getElementById("fbForm2").submit();
    }
};

</script>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>

...

<div class="form-group">
      <label class="col-md-4 control-label"></label>
      <div class="col-md-4"><br>
       <!-- NOTE: Made some changes for click events as advised here: https://developers.google.com/recaptcha/docs/invisible#programmatic_execute -->
        <button id="btnSubmit" type="submit" value="" class="btn btn-success">SUBMIT <span class="glyphicon glyphicon-send"></span></button>
        <div class="g-recaptcha" data-sitekey="6LfDBGcUAAAAABnYRk1ZQkapzCs8c1Rr2ZARMchF" data-callback="onSubmit" data-size="invisible"></div>
        <!-- Test: 6LfuAWcUAAAAAEKjLeOZfygAMxAeld1k4UUMGnfN -->
        <!-- Live: 6LfDBGcUAAAAABnYRk1ZQkapzCs8c1Rr2ZARMchF -->
      </div>
    </div>

«但是,我无法将验证码绑定到按钮,因为它会自动触发...»
这是一个可能是错误的假设。

您可以使用 .preventDefault() 阻止默认提交行为。所以你可以检查你的输入是否正确...如果是这样,请正常进行。

即:

$('#btnSubmit').on("click",function(e){
  e.preventDefault();

  // Check all you input are filled
  // If yes, then submit for real:
  $(this).closest("form").submit();
});

我想在提交时触发重新验证没有问题...