Отправка формы через модальное поле, не покидая страницу / модальное - PullRequest
0 голосов
/ 01 июня 2011

Я использую проект 'ModalBox' из http://okonet.ru/projects/modalbox/index.html, чтобы сгенерировать мой модал.

Я также использую этот общий скрипт, который сохраняет электронные письма, отправленные через форму, в основной текстфайл как простое / быстрое решение.http://www.knowledgesutra.com/forums/topic/25586-php-simple-newsletter-script/

Хотя у меня есть дилемма.Чтобы сохранить модальность и отобразить мой «mailing_thankyou.php», моя форма должна иметь «onsubmit =« return false »», но для того, чтобы мой php-скрипт работал, я должен удалить этот возврат false, но затем он меняется нановая страница, чтобы сохранить эту информацию.

У кого-нибудь есть идеи?

Это основная часть вопроса:

myModal.html

<div id="signUp">
<form action="mailer/mailing.php" id="myForm" method="post" class="style16">
    <input type="text" name="email" size="30" value="your email here!">
    <input type="submit" value="Send link" name="submit" onclick="Modalbox.show('mailer/mailing_thankyou.php', {title: 'Form sending status', width: 500, params:Form.serialize('myForm') }); return false;">
    &nbsp;or&nbsp;<a href="#" title="Cancel &amp; close dialog" onclick="Modalbox.hide(); return false;">Cancel &amp; close</a>
    <!-- ><input type="submit" value="GO!" name="submit"> -->
    </form>
</div>

Вы можете взять мои файлы из моего репозитория git: https://github.com/jwmann/Modal-Sign-up

Ответы [ 3 ]

3 голосов
/ 01 июня 2011

Я не очень хорош в Mootools, поэтому приведу пример в jQuery - если вы поймете, я уверен, что вы найдете правильный синтаксис и для Mootools.

Идея состоит в том, чтобы использовать AJAX-вызов для отправки формы (и оставить onsubmit="return false;", чтобы окно браузера не перезагружалось):

var $form = $('#myForm');
$.post($form.attr('action'), $form.serialize(), function(response) {
    $('div#signUp').html(response);
});

Что это делает:

  1. Сохраняет упакованный элемент формы jQuery в $form
  2. Использует значение атрибута action формы в качестве целевого адреса запроса
  3. Сериализует и передает значения всех элементов формы
  4. Выполняет функцию обратного вызова, которая принимает возвращенный HTML-код и заменяет содержимое <div id='signUp'>...</div> этим HTML.

Примечание: убедитесь, что скрипт в формах action возвращает только html для содержимого поля регистрации (имеется в виду <head>, <body> и т. Д. - только то, что должно быть в поле впоследствии)

EDIT / ПОПРАВКИ

Это то, что я только что узнал на странице Документов MooTools для Ajax / Request :

Эквивалент моего фрагмента jQuery в MooTools будет

new Request.HTML({                     // Creates an AJAX request
    'url': $('myForm').get('action'),  // Sets request address to the form's action
    'update': $('signUp')              // Indicates that results should be auto-loaded into element with id='signUp'
}).post($('myForm'));                  // Indicates that this form has to be serialized and transferred; also starts the request process

Для этого требуется, чтобы действие формы возвращало результат для отображения (сообщение с благодарностью). Это может быть достигнуто путем перенаправления со стороны сервера после успешной обработки данных формы, например, в PHP header('Location: mailer/mailing_thankyou.php'); exit;

После более продолжительного изучения вашего кода я понял, что это не совсем то, что вы хотите (поскольку я вижу, что вы не хотите, чтобы форма заменялась сообщением с благодарностью - вы хотите, чтобы она отображалась в модальном режиме). Отсюда и обновленное решение для вашего случая:

new Request.HTML({                     // Creates an AJAX request
    'url': $('myForm').get('action'),  // Sets request address to the form's action
    'onSuccess': function() {          // Defines what to do when request is successful (similarly you should take care of error cases with onFailure declaration
        Modalbox.show('mailer/mailing_thankyou.php', {
            title: 'Form sending status', 
            width: 500
            // I have removed params from here, because they are handled in the .post() below
        });
    }
}).post($('myForm'));                  // Indicates that this form has to be serialized and transferred; also starts the request process

Простите, если что-то из этого не сработало (как я уже сказал, я скорее парень из jQuery - просто пытаюсь здесь помочь)

0 голосов
/ 03 июня 2011

Я удалил «return false» из «onsubmit» входной отправки (duhhh facepalm ), потому что он пытался сериализовать его на первом этапе с prototype.js

Затем яизменил скрипт php так, чтобы он получал $ _GET вместо $ _POST

без дополнительной функциональности или хаков.Спасибо за всю помощь, хотя.

0 голосов
/ 01 июня 2011

Отправьте форму на скрытый iframe на странице. Присвойте iframe значение name, а затем задайте целевой объект в форме. Вы можете сделать iframe 1x1 пикселем и установить visibility на hidden (если вы скрываете с помощью display: none, это может работать не во всех браузерах.)

См. Этот вопрос для деталей: Как вы публикуете в iframe?

...