Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Обработка нескольких форм на странице (https://javascript.ru/forum/events/51651-obrabotka-neskolkikh-form-na-stranice.html)

cyber_bober 14.11.2014 08:45

Обработка нескольких форм на странице
 
Привет, есть к примеру три формы на одной странице (форма записи на курс), форм может быть от 1 до 10, каждую форму нужно обработать и отправить в базу. Форма обрабатывается javascript и отправляет данные посредством ajax. Чтобы привязаться к форме, я использую ее id.

Но возникает такой момент, что для каждой формы мне нужен свой обработчик, тоесть я привязываюсь к ней по id, чтобы сообщить обработчику откуда собирать данные. ID генерируется посредством выборки из базы, типа #form%id% где %id% то что выдаст шаблонизатор.

По итогу нужно назначать обработчик для каждой формы, который будет отличаться только id формы, которую он обрабатывает.
Как можно изящней это решить?

danik.js 14.11.2014 10:21

Цитата:

Сообщение от cyber_bober
для каждой формы мне нужен свой обработчик

А что уникального в этих формах, кроме id?
И что уникального в их обработчиках?

krasovsky 14.11.2014 11:05

Если формы одинаковые\однотипные то добавь к каждой такой форме класс и привязывайся к нему, а не к id.

cyber_bober 14.11.2014 14:43

danik.js,
форма отличается только одним полем, эта форма курса, в каждую из них передается его название шаблонизатором и все, в остальном форма идентичная. Обработчик вообще одинаковый, просто как связать обработчик с формой иначе, если не через айди? Повешать вызов функции на action формы и обрабатывать ее через this?
Просто если делать через class, как предлагает krasovsky, то обработчик пройдется через все формы, а в них могут по ошибке занести данные и одно поле в каждой по умолчанию заполнено разным значением.

danik.js 14.11.2014 15:40

Стандартный обработчик:

$('form').submit(e) {
    e.preventDefault();
    $.ajax({
        type: this.method,
        url: this.action,
        data: $(this).serialize(),
        success: function() { /*успех*/ },
        error: function() { /*ошибка отправки*/ },
    });
});


И пофиг че там у тебя в форме. Только учти, селектор "form" захватит все формы, возможно тебе не все нужны (например форма поиска). Поэтому назначь класс нужным.

danik.js 14.11.2014 15:42

Ах да, на сервере аяксовый запрос отличаешь от обычного по заголовку X-Requested-With

kostyanet 14.11.2014 17:18

Цитата:

Сообщение от cyber_bober
чтобы сообщить обработчику откуда собирать данные.

"Обработчик" не собирает данные, он получает данные. Собирает как вы сами написали - ява-скрипт. Никто не знает кроме Ванги как вы их собираете. Если в json - там будет id формы, тот самый, и значит процессинг узнает что к чему. Если грузится как есть, как форма, то поля должны называться как форма, ну типа form1[1] или form1[somename] - что даст когерентный массив в $_POST['form1']['somename'] и isset($_POST['form1'] соответственно все данные именно form1. И последнее, самый баян - в action формы пишут ее признак и через $_GET получают и используют.

kostyanet 14.11.2014 17:19

action="some.php?form_id=1"

if(isset($_GET['form_id']))
  $form_id = $_GET['form_id'];


Нет, самый баян это дать name кнопке submit, чтобы оно в запросе оказалось.

И еще, попробуйте уже атрибут form. Или будете ждать когда сгниет html5?

cyber_bober 17.11.2014 05:36

danik.js,
спасибо, я правда без jquery, но суть понятна

cyber_bober 17.11.2014 05:40

kostyanet,
спасибо, про массив тоже понятно, но вот как form поможет в данном случае? у меня форма пользователем не создается и не изменяется количество полей)


Часовой пояс GMT +3, время: 04:30.