为什么一次同时出现两个重击?

问题描述 投票:1回答:1

我在模态窗口的一页上有两种形式(授权和注册)。对于这两种形式,我都连接了一个不可见的Recaptcha(v2)。这是recaptcha init的代码:

var idCaptcha1, idCaptcha2;
var onloadReCaptchaInvisible = function () {
    //login
    idCaptcha1 = grecaptcha.render('recaptcha1', {
        "sitekey": "6LfpltgUAAAAAMW3PstNGrEk3pMos0TzN9jyL7mT",
        "callback": "onSubmitReCaptcha1",
        "size": "invisible"
    });
    //reg
    idCaptcha2 = grecaptcha.render('recaptcha2', {
        "sitekey": "6LfpltgUAAAAAMW3PstNGrEk3pMos0TzN9jyL7mT",
        "callback": "onSubmitReCaptcha2",
        "size": "invisible"
    });
};

function onSubmitReCaptcha1(token) {
    alert('test');
    sendForm('signin', idCaptcha1);
}

function onSubmitReCaptcha2(token) {
    sendForm('signup', idCaptcha2);
}

[用户提交任何表格时,我都会尝试找出什么表格,然后执行我需要的验证码:

$('form').submit(function(event) {
    // отменим отправку форму на сервер
    event.preventDefault();

    switch($(this).closest('.modal').attr('id')){
        case 'signin':
            grecaptcha.execute(idCaptcha1);
        case 'signup':
            grecaptcha.execute(idCaptcha2);
    }

});

最后,这是发送表单功能的代码:

function sendForm(id,captcha){
    alert(id);
    let form = $('#'+id).find('form'),
        url  = form.attr('action'),
        formData = new FormData(form);
    formData.append('g-recaptcha-response', grecaptcha.getResponse(captcha));

    console.log(url);    
    console.log(formData);        
}

因此,验证码可以正常工作,此外,它们两者都可以立即出现。我做错了什么?我怀疑$('form').submit()中存在问题,但我找不到原因。

I attached the screenshot.

javascript jquery web recaptcha captcha
1个回答
0
投票

您忘记了每个break末尾的case语句。如果您匹配第一种情况而没有break,则它会失败并执行下一种情况,因此会同时显示两个Recaptcha。

$('form').submit(function(event) {
    // отменим отправку форму на сервер
    event.preventDefault();

    switch($(this).closest('.modal').attr('id')){
        case 'signin':
            grecaptcha.execute(idCaptcha1);
            break;
        case 'signup':
            grecaptcha.execute(idCaptcha2);
            break;
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.