Хобрук: Ваш путь к мастерству в программировании

Установите поле reCaptcha по мере необходимости

Я использую новую reCaptcha с плагином jQuery Validate. Плагин проверки отлично работает с моей формой, но, к сожалению, не работает с reCaptcha. Моя попытка заставить его работать ниже:

HTML:

<div class="g-recaptcha" name="recaptcha" id="recaptcha" data-sitekey="XXXXX"></div> 

Javascript:

 recaptcha: {
    required: true
      }    

но это не сработало. Кто-нибудь знает, как это исправить. Мне просто нужно стандартное сообщение об ошибке Это поле обязательно для заполнения.


Ответы:


1

Вы должны добавить скрытый ввод для reCaptcha, потому что проверка jQuery может проверять только ввод/текстовое поле/выбор:

<div class="g-recaptcha" data-sitekey="XXXXX"></div>
<input type="hidden" name="recaptcha" data-rule-recaptcha="true">
<!-- 
     We set "data-rule-recaptcha" — this will require jQuery Validate
     to validate this field using method named "recaptcha"
     (which we write below) 
-->

Затем перепишите свой JS следующим образом:

// By default jQuery Validation ignore hidden inputs, 
// so we change settings to ignore inputs with class "no-validation". 
// Cause our hidden input didn't have this class — it would be validated!
$('form').validate({
  ignore: '.no-validation'
});     

// Add our validation method for reCaptcha: 
$.validator.addMethod("recaptcha", function(value, element) {
  var grecaptcha = window.grecaptcha || null;
  return !grecaptcha || grecaptcha.getResponse();
}, "Please fill reCAPTCHA");

Это все.

07.12.2015

2

Так что мне удалось заставить его работать. Единственная проблема заключается в том, что после заполнения пользователем reCaptcha сообщение Это поле обязательно для заполнения не исчезает быстро. Я использую размытие, нажатие клавиши и фокусировку, чтобы обнаружить ввод пользователя и удалить сообщение об ошибке.

JS:

$("#myForm").bind('blur keydown focusout', function(){ 

        var dataArray = $("#myForm").serializeArray(),
        dataObj = {};
        console.dir(dataArray); //require firebug
        //console.log(dataArray);

        $(dataArray).each(function(i, field){
          dataObj[field.name] = field.value;
        });

        var recaptcha = (dataObj['g-recaptcha-response']);

        if(recaptcha != "") {
                $( "#temp" ).remove();
        }       
    });

    $( ".register" ).click(function() {

        var dataArray = $("#myForm").serializeArray(),
            dataObj = {};
            console.dir(dataArray); //require firebug
            //console.log(dataArray);

        $(dataArray).each(function(i, field){
          dataObj[field.name] = field.value;
        });

        var recaptcha = (dataObj['g-recaptcha-response']);

        $( "#temp" ).remove();

            if(recaptcha == "") {
                $("#recaptcha").append('<label id="temp" style="color:red;line-height:normal;font-size: small;">This field is required.</label>');
            }

    });             

});

HTML:

<div class="g-recaptcha" name="recaptcha" id="recaptcha" data-sitekey="XXXXXXXXXXXXXXXXXXXXXXXXX"></div>   
31.01.2015

3

Ваш код:

<div class="g-recaptcha" name="recaptcha" id="recaptcha" data-sitekey="XXXXX"></div>

с...

recaptcha: {
    required: true
} 

Вы не можете проверить <div>. Период.

Подключаемый модуль jQuery Validate может только проверять элементы <input>, <textarea> и <select>, которые также находятся в контейнере <form></form>.

Единственным обходным решением было бы скопировать ваше значение в элемент type="hidden" input, а затем применить к нему проверку.

30.01.2015
  • @etoxin, будь конкретнее, пожалуйста. Мой ответ — констатация факта и единственно возможный способ обойти это ограничение. Не работает не имеет смысла в данном контексте. 31.10.2016

  • 4

    надеясь, что вы используете тег формы HTML5.

    <form>
    <div class="g-recaptcha" name="recaptcha" id="recaptcha" data-sitekey="XXXXX" required></div>
    </form>
    

    просто используйте required в конце

    29.02.2016
  • Вы не можете проверить div! Только элементы input, textarea и select могут быть проверены. 25.03.2016
  • Новые материалы

    Как симулировать серию пенальти на Python с помощью симуляции Монте-Карло, часть 1: генерация функций
    Серия пенальти была огромным испытанием во время чемпионата мира по футболу. Они вызвали много споров в социальных сетях и новостных агентствах. Даже финальный матч турнира решался по..

    AST для разработчиков JavaScript
    TL; DR Эта статья - мое выступление на недавно состоявшейся конференции Stockholm ReactJS Meetup. Вы можете посмотреть слайды здесь..

    5 проектов на Python, которые нужно создать прямо сейчас!
    Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..