Один post обработчик для нескольких форм. Jquery

392
12 января 2017, 06:32

Здравствуйте, подскажите как приучить код к нескольким формам на странице.

Обработчик:

$(document).ready(function(){
    /* Следующий код выполняется только после загрузки DOM */
    /* Данный флаг предотвращает отправку нескольких комментариев: */
    var working = false;
    /* Ловим событие отправки формы: */
    $('#addCommentForm').submit(function(e){
        e.preventDefault();
        if(working) return false;
        working = true;
        $('#submit').val('Занято...');
        $('span.error').remove();
        /* Отправляем поля формы в comment.php: */
        $.post('comment.php',$(this).serialize(),function(msg){
            working = false;
            $('#submit').val('Отправить');
            if(msg.status){
                /* 
                /   Если вставка была успешной, добавляем комментарий 
                /   ниже последнего на странице с эффектом slideDown
                /*/
                $(msg.html).hide().insertBefore('#addCommentContainer').slideDown();
                $('#body').val('');
            }
            else {
                /*
                /   Если есть ошибки, проходим циклом по объекту
                /   msg.errors и выводим их на страницу
                /*/
                $.each(msg.errors,function(k,v){
                    $('label[for='+k+']').append(''+v+'');
                });
            }
        },'json');
    });
});

Форма:

<div id="addCommentContainer">
<p>Добавить комментарий</p>
<form id="addCommentForm" method="post" action="">
<div>
<label for="name">Имя</label>
<input type="text" name="name" id="name" />
<label for="email">Email</label>
<input type="text" name="email" id="email" />
<label for="url">Вебсайт (не обязательно)</label>
<input type="text" name="url" id="url" />
<label for="body">Содержание комментария</label>
<textarea name="body" id="body" cols="20" rows="5"></textarea>
<input type="submit" id="submit" value="Отправить" />
</div>
</form>
</div>

Нужно чтобы было несколько таких форм на странице и обработчик мог работать с ними по отдельности. Т.е определял с какой формы именно отправлен post, обрабатывал данные и писал ответ. А в данный момент он работает только с одной.

Можно по идее поменять на id="addCommentForm" на class="addCommentForm" и привешать на каждую форму разный id... Но я не знаю, как потом его выловить через jquery. :(

Answer 1

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

READ ALSO
Как вывести в инпут сегодняшнюю дату при загрузке страницы [требует правки]

Как вывести в инпут сегодняшнюю дату при загрузке страницы [требует правки]

Использую календарь Air Datepicker с форматированием input type="text" data-date-format="с dd M" value="" class=""

263
Вернуть значение стиля

Вернуть значение стиля

После включения чекбокса меняется значение стиля для указанного блока divЗначение устанавливается left:0; и width: 245px;

234