Я разбирался с проблемами помещения формы Drupal в лайтбокс Lightbox2.
Возможно, неправильно, я прибегнул к выполнению всей проверки в javascript перед отправкой формы (я не смог заставить нормальную проверку вернуть форму в лайтбоксе).
В любом случае, я использую:
$form['#attributes']['onsubmit'] = 'return Drupal.mymodule.validateMailForm();';
и работает нормально.
Далее идет тест ReCaptcha.
if (validation == 'failed') {
return false;
}
else {
return Drupal.mymodule.validateCaptcha();
}
Когда я наконец получил recaptcha, чтобы остановить отправку формы независимо от результата recaptcha (я поменял функцию на 'return false'), я обнаружил это в моей функции validateCaption ():
challengeField = $("input#recaptcha_challenge_field").val();
responseField = $("input#recaptcha_response_field").val();
console.log(challengeField);
console.log(responseField);
Обе переменные не определены. Хм.
Таким образом, есть два вопроса меньшего размера («почему jquery не собирает значения?» И «может ли атрибут onsubmit убедить функцию submit ждать, пока она сделает свое дело?») И один большой:
Кому-нибудь удалось объединить форму Drupal, лайтбокс и рекапчу?
Edit:
Вторая часть проблемы - jquery не собирал значения - была из-за того, что я использовал iframe внутри лайтбокса (иначе я не мог заставить его остаться). Замена выбора выше на:
challengeField = $('#iframeID').contents().find('input#recaptcha_challenge_field').val();
сделал трюк там.
Если я смогу взломать это дальше, я сообщу ...