You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google reCAPTCHA v3表单提交按钮需双击才能生效的技术问题

解决reCAPTCHA v3提交按钮需点击两次的问题

问题根源

你的代码同时绑定了按钮的click事件监听和reCAPTCHA的data-callback回调,逻辑冲突导致点击两次才生效:第一次点击时reCAPTCHA还未完成验证,grecaptcha.getResponse()返回空值,代码仅触发了验证流程但未提交表单;第二次点击时验证已完成,才会执行提交逻辑。

修改方案

将表单验证、提交逻辑全部整合到reCAPTCHA的回调函数中,去掉按钮自身的click监听,避免逻辑冲突。

修改后的HTML代码

<div class="form_wrpr">
   <f:form.hidden id="g-recaptcha-response" property="g-recaptcha-response" />
    <button class="g-recaptcha btn btn-blue" id="reg-submit"
     data-sitekey="{fields.clientKey}" data-callback='onSubmit' data-action='submit' type="button">
   {fields.Button}</button>
</div>

关键修改:将按钮type从submit改为button,避免默认表单提交行为干扰。

修改后的Script代码

// 定义reCAPTCHA的回调函数,验证完成后自动执行
function onSubmit(token) {
    let isvalid4 = true;

    // 第一步:表单字段验证
    if ($('#company').val() === '') {
        $('#company_error').text($('#company_error').data("error-mandatory"));
        isvalid4 = false;
    }

    // 验证不通过则终止流程,重置验证码
    if (!isvalid4) {
        grecaptcha.reset();
        return;
    }

    // 验证通过,禁用按钮防止重复提交
    $("#reg-submit").attr("disabled", true);

    // 第二步:提交表单到后端
    $.ajax({
        type: 'POST',
        url: $('#form-ajaxurl').val(),
        // 序列化表单数据并附加reCAPTCHA token
        data: $('#demo_form').serialize() + '&g-recaptcha-response=' + token,
        success: function(data) {
            $('#reg-submit').attr("disabled", false);
            const output = JSON.parse(data);
            
            if (output.error === 1 || output.error === 2) {
                $('#form-errors').html(output.result);
                grecaptcha.reset(); // 错误时重置验证码,允许重新提交
            } else {
                window.location.href = 'test.com' + output.result;
            }
        },
        error: function() {
            // 请求失败时恢复按钮状态并重置验证码
            $('#reg-submit').attr("disabled", false);
            grecaptcha.reset();
        }
    });
}

关键修改:

  • 移除原按钮的click监听,所有逻辑依赖reCAPTCHA回调触发
  • 验证失败或请求出错时调用grecaptcha.reset(),确保用户可以重新发起验证
  • 提交时主动附加reCAPTCHA token,保证后端能接收到验证信息

内容的提问来源于stack exchange,提问作者Meera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:40:40