несколько форм с методом сериализации jquery не работают

#php #jquery #html

#php #jquery #HTML

Вопрос:

У меня есть несколько форм, и каждая форма отправляется, но не первая.

Я перепробовал все, что похоже event.preventDefault();

МОЙ КОД :

 <?php for($i=0;$i<=5;$i  ){ ?>
<form id="form<?php echo $i; ?>>
<td><?php echo $i   ?><td>
<td><input type="text" name="detention_unloading_charges"   value="<?php echo $history[$i]->name; ?>"></td>
<td><input type="text"  name="dtn_chrg_per_day" value="<?php echo $history[$i]->dtn_chrg_per_day; ?>"></td>
<td><input type="text"  name="dtn_chrg" value="<?php echo $history[$i]->dtn_chrg; ?>"></td>
<td>
<button class="btn btn-secondary" type="button" onclick="save_changes(<?php echo $i ?>);">Save Changes</button></td>
</form>
}
  

и функция jquery:

 function save_changes(id)
{
    $.ajax({
        url: "History/update",
        type: "POST",
        data: $('#form' id).serialize(),
        success: function(data) {
            // Success message
            console.log(data);
            if(data==1){
                $('.success_pop_up').addClass('show').removeClass('d-none');
            } else{
                $('.failure_pop_up').addClass('show').removeClass('d-none');;
            }
        }
   });
}
  

Комментарии:

1. оставьте $ i ниже <кнопка>

2. @gracie williams это вообще не имеет смысла

3. Он использует echo без необходимости , что также увеличивает значение $ i отдельно от цикла for , поэтому цикл выполняется только трижды, а идентификатор формы равен form0 , но соответствующая функция save_changes(1) , где эта форма вообще не существует

4. @грейси Уильямс, тогда решение состоит в том, чтобы удалить лишний $ i , а не перемещать его куда-то еще (что вы предложили в своем первом комментарии)

5. да, извините, что удалил это

Ответ №1:

Вы увеличиваете $ i дважды в самом начале на echo $i , что также увеличивает $ i отдельно от цикла for , поэтому цикл выполняется только трижды, а идентификатор формы равен form0 , но соответствующая функция save_changes(1) , где этот идентификатор формы вообще не существует , попробуйте приведенный ниже код.

     <?php for($i=0;$i<=5;$i  ){ ?>
    <form id="form<?php echo $i; ?>>
    <td><?php echo $i?><td>
    <td><input type="text" name="detention_unloading_charges"   value="<?php echo $history[$i]->name; ?>"></td>
    <td><input type="text"  name="dtn_chrg_per_day" value="<?php echo $history[$i]->dtn_chrg_per_day; ?>"></td>
    <td><input type="text"  name="dtn_chrg" value="<?php echo $history[$i]->dtn_chrg; ?>"></td>
    <td>
    <button class="btn btn-secondary" type="button" onclick="save_changes(<?php echo $i ?>);">Save Changes</button></td>
    </form>    
    <?php  } ;?>
  

Попробуйте этот код и дайте мне знать, работает ли он.

Ответ №2:

Вероятно, вы захотите решить эту проблему следующим образом:

Пусть кнопка выполняет отправку по умолчанию следующим образом:

 <button type="submit">Send</button>
  

Перехватите событие отправки для вашей формы в jQuery:

 $('form').on('submit', function(e) {
    // Prevent default so the browser doesnt automatically submit it.
    e.preventDefault();
    var data = $(this).serialize();
    // ... send it
});
  

Таким образом, намного проще выполнять запросы AJAX-форм.