diff --git a/src/modules/security.js b/src/modules/security.js index 2769fef..42800e1 100644 --- a/src/modules/security.js +++ b/src/modules/security.js @@ -553,9 +553,12 @@ $forms = $('form'); } + var i=0, + grecaptchaRenderCallback = []; $forms.each(function () { var $form = $(this), - config = $form.context.validationConfig; + config = $form.context.validationConfig || false; + if (config) { $('[data-validation~="recaptcha"]', $form).each(function () { var $input = $(this), @@ -569,21 +572,26 @@ throw new Error('Google reCaptcha site key is required.'); } - var grecaptchaRenderCallback = function (result) { - $('form').each(function () { + if (!$form.attr('id')) { + $form.attr('id', 'recaptcha-form-' + (i++)); + } + grecaptchaRenderCallback[$form.attr('id')] = function (result) { + var formID; + $('#' + formID).each(function () { $('[data-validation~="recaptcha"]', $(this)).each(function () { $(this).trigger('validation', (result && result !== '')); }); }); }; + grecaptchaRenderCallback[$form.attr('id')].formID = $form.attr('id'); var widgetId = grecaptcha.render(div, { sitekey: siteKey, theme: theme, size: size, type: type, - callback: grecaptchaRenderCallback, - 'expired-callback': grecaptchaRenderCallback + callback: grecaptchaRenderCallback[$form.attr('id')], + 'expired-callback': grecaptchaRenderCallback[$form.attr('id')] }); $input @@ -597,6 +605,7 @@ .append(div); }); + } }); };