Невозможно отправить страницу даже при использовании preventDefault в laravel - PullRequest
0 голосов
/ 05 мая 2020

Я не могу отправить форму, даже если я использовал preventDefault (страница обновлена ​​и не предпринимает никаких действий) Мои входные данные формы заполняются динамически, вот мой код.

HTML

<div class="modal-body">
  <form id="update_form">
    <!-- loaded below -->
  </form>
</div>

другой запрос, который заполняет данные моей формы

@csrf
<div class="form-row">
    <div class="form-group col-md-6">
        <input type="hidden" name="request_type" value="{{RegisterTypesNames::Faculty}}">
        <label>University</label>
        <select name="university" class="custom-select" id="university{{$action}}">
            <option selected value="1">University of Cansas</option>
        </select>
    </div>
    <div class="form-group col-md-6">
        <label>Faculty</label>
        <input type="text" class="form-control" name="faculty" id="faculties{{$action}}">
    </div>
    <div class="form-group col-md-6">
        <label>Init</label>
        <input type="text" class="form-control" name="short_name" id="short_names{{$action}}">
    </div>
</div>
<button type="submit" class="btn btn-primary"><span class="fa fa-save"></span> Save</button>

И jquery код

$('#update_form').submit(function (e) {
    $.ajax({
        url: '/update_data',
        type: "POST",
        data: $('#update_form').serialize(),
        dataType: "json",
        success: function (data) {
            console.log(data.result);
        }

    });
    e.preventDefault();
});

Примечание: я использую несколько частичных форм, как это, все остальные работают нормально

1 Ответ

0 голосов
/ 05 мая 2020

Я не могу отправить форму, хотя я использовал preventDefault, (страница обновлена ​​и не предпринимает никаких действий)

Интерпретация: утверждения «страница обновлена» и «использовано» preventDefault "указывают на то, что проблема в том, что код внутри $("#id").submit( не запускается, а отправка страницы по умолчанию запускается, следовательно," страница обновлена ​​".

Поскольку событие jquery не запускается, оно вероятно, означает, что HTML не существует при запуске сценария. Обычно с этим можно справиться, добавив do c .ready; OP указывает, что он уже находится в do c .ready.

Альтернативой является использование делегирования событий. Хотя неясно, выполняется ли код до генерации HTML или HTML добавляется после (небольшая разница).

Решение для делегирования событий - использовать:

 $(document).on("submit", "#update_form", function(e) {
     e.preventDefault();

     $.ajax({...

});
...