要求重新提交表格提交?

时间:2016-02-02 14:26:48

标签: jquery asp.net-mvc jquery-validate recaptcha unobtrusive-validation

我们刚刚将google recaptcha v2添加到我们的网站。它工作正常,但我们想要在表单提交reCaptcha。我们使用默认的不显眼的jquery验证。当用户没有填写reCaptcha小部件时,g-recaptcha-response将为空。我已经看到其他线程询问如何使用javascript验证reCaptcha。我们绝对不想这样做,我们仍希望从服务器端验证它,但希望阻止垃圾邮件机器人尝试提交表单(因此需要它)。

看起来mvc只是为每个必填字段添加data-val="true"data-val-required="my error message",但我不确定如何挂钩reCaptcha。我还想确保以下代码仍然可以保持不变:

if ($(form).valid()) {
  .....
}

2 个答案:

答案 0 :(得分:1)

我只需要解决同样的问题,并提出以下方法。总之,添加一个隐藏字段,jquery不显眼的验证操作,并在recaptcha回调&amp ;;上填充/清除它。期满。

脚本:

function reCaptchaVerify(response) {
    $('#hidden-recap').val(response);
}

function reCaptchaExpired () {
    $('#hidden-recap').val('');
}

function reCaptchaCallback () {
    grecaptcha.render('g-recaptcha', {
      'sitekey': RC2KEY,
      'callback': reCaptchaVerify,
      'expired-callback': reCaptchaExpired
    });
}

$.validator.setDefaults({ ignore: null });

在表单中,添加字段:

<div><input type="hidden" name="hidden-recap" id="hidden-recap" class="text form-control" value="" maxlength="500"
data-val="true" data-val-required="Please complete reCaptcha" />
<span class="field-validation-valid" data-valmsg-for="hidden-recap" data-valmsg-replace="true"></span></div>

注释

  • 隐藏字段只是用于客户端验证,以进行检查 reCaptcha已经完成;服务器验证可以忽略 它。
  • 最后的脚本行.setDefaults是必需的,因为默认情况下 不显眼的验证会忽略隐藏的字段。

答案 1 :(得分:0)

我没有找到完美的解决方案,但我找到了一些现在可行的方法: http://www.ivanthevariable.com/combining-googles-recaptcha-and-jquery-validate/

html:

<input type="hidden" class="hiddenRecaptcha required" name="hiddenRecaptcha" id="hiddenRecaptcha">
<div class="g-recaptcha" data-sitekey="{YOUR-SITE-KEY-HERE}"></div>

<强>的javascript:

var validator = $("#add-conference").validate({
   ignore: ".ignore",
   rules: {
       city: {
           required: function() {
               if ($("#city-name").val()) {
                   return false;
               } else {
                   return true;
               }
           }
       },
       country: {
           required: function() {
               if ($("#country-name").val()) {
                   return false;
               } else {
                   return true;
               }
           }
       },
       "hiddenRecaptcha": {
           required: function() {
               if(grecaptcha.getResponse() == '') {
                   return true;
               } else {
                   return false;
               }
           }
       }
   }
});

我对这个解决方案不喜欢的是我必须关闭不引人注目的验证。希望有人提出一个解决方案,可以用于不引人注目的验证,直到那时我将使用这个解决方案。