14.11.2014, 08:45
|
Аспирант
|
|
Регистрация: 12.12.2012
Сообщений: 80
|
|
Обработка нескольких форм на странице
Привет, есть к примеру три формы на одной странице (форма записи на курс), форм может быть от 1 до 10, каждую форму нужно обработать и отправить в базу. Форма обрабатывается javascript и отправляет данные посредством ajax. Чтобы привязаться к форме, я использую ее id.
Но возникает такой момент, что для каждой формы мне нужен свой обработчик, тоесть я привязываюсь к ней по id, чтобы сообщить обработчику откуда собирать данные. ID генерируется посредством выборки из базы, типа #form%id% где %id% то что выдаст шаблонизатор.
По итогу нужно назначать обработчик для каждой формы, который будет отличаться только id формы, которую он обрабатывает.
Как можно изящней это решить?
|
|
14.11.2014, 10:21
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от cyber_bober
|
для каждой формы мне нужен свой обработчик
|
А что уникального в этих формах, кроме id?
И что уникального в их обработчиках?
__________________
В личку только с интересными предложениями
|
|
14.11.2014, 11:05
|
Профессор
|
|
Регистрация: 21.12.2012
Сообщений: 869
|
|
Если формы одинаковые\однотипные то добавь к каждой такой форме класс и привязывайся к нему, а не к id.
|
|
14.11.2014, 14:43
|
Аспирант
|
|
Регистрация: 12.12.2012
Сообщений: 80
|
|
danik.js,
форма отличается только одним полем, эта форма курса, в каждую из них передается его название шаблонизатором и все, в остальном форма идентичная. Обработчик вообще одинаковый, просто как связать обработчик с формой иначе, если не через айди? Повешать вызов функции на action формы и обрабатывать ее через this?
Просто если делать через class, как предлагает krasovsky, то обработчик пройдется через все формы, а в них могут по ошибке занести данные и одно поле в каждой по умолчанию заполнено разным значением.
|
|
14.11.2014, 15:40
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Стандартный обработчик:
$('form').submit(e) {
e.preventDefault();
$.ajax({
type: this.method,
url: this.action,
data: $(this).serialize(),
success: function() { /*успех*/ },
error: function() { /*ошибка отправки*/ },
});
});
И пофиг че там у тебя в форме. Только учти, селектор "form" захватит все формы, возможно тебе не все нужны (например форма поиска). Поэтому назначь класс нужным.
__________________
В личку только с интересными предложениями
|
|
14.11.2014, 15:42
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Ах да, на сервере аяксовый запрос отличаешь от обычного по заголовку X-Requested-With
__________________
В личку только с интересными предложениями
|
|
14.11.2014, 17:18
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от cyber_bober
|
чтобы сообщить обработчику откуда собирать данные.
|
"Обработчик" не собирает данные, он получает данные. Собирает как вы сами написали - ява-скрипт. Никто не знает кроме Ванги как вы их собираете. Если в json - там будет id формы, тот самый, и значит процессинг узнает что к чему. Если грузится как есть, как форма, то поля должны называться как форма, ну типа form1[1] или form1[somename] - что даст когерентный массив в $_POST['form1']['somename'] и isset($_POST['form1'] соответственно все данные именно form1. И последнее, самый баян - в action формы пишут ее признак и через $_GET получают и используют.
|
|
14.11.2014, 17:19
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
action="some.php?form_id=1"
if(isset($_GET['form_id']))
$form_id = $_GET['form_id'];
Нет, самый баян это дать name кнопке submit, чтобы оно в запросе оказалось.
И еще, попробуйте уже атрибут form. Или будете ждать когда сгниет html5?
Последний раз редактировалось kostyanet, 14.11.2014 в 17:23.
|
|
17.11.2014, 05:36
|
Аспирант
|
|
Регистрация: 12.12.2012
Сообщений: 80
|
|
danik.js,
спасибо, я правда без jquery, но суть понятна
|
|
17.11.2014, 05:40
|
Аспирант
|
|
Регистрация: 12.12.2012
Сообщений: 80
|
|
kostyanet,
спасибо, про массив тоже понятно, но вот как form поможет в данном случае? у меня форма пользователем не создается и не изменяется количество полей)
|
|
|
|