#javascript #jquery #ajax #modal-dialog #bootstrap-modal
#javascript #jquery #ajax #modal-dialog #bootstrap-модальный
Вопрос:
Я использую ajax для отправки запроса и последующего открытия модального окна начальной загрузки. Проблема в том, что когда я использую ajax, я делаю запрос к своему контроллеру, а возврат (модальный контент) Я загружаю следующим образом:
//modal loading
$('#contentModalFinanceiroParcela').html(data);
//exibição da modal
$('#modalFinanceiroParcela').modal({
keyboard: true,
}, 'show');
Пока все идеально. Проблема в том, что с этого момента я не могу привязать форму для регистрации события отправки формы. В функции bindFormFinanceiroParcela, сколько бы я ни передавал «диалог», привязка не работает.
bindFormFinanceiroParcela(document.getElementById(«contentModalFinanceiroParcela»));
Поискав по форумам, я обнаружил, что процесс работает, если я загружаю модал с помощью команды «load», как показано ниже, но я не могу сделать это так, иначе он отправит второй запрос к контроллеру, потому что ранее я уже использовал ajax .
//That way it works, but I can't use it.
$('#contentModalFinanceiroParcela').load(url, function () {
$('#modalFinanceiroParcela').modal({
keyboard: true
}, 'show');
// Inscreve o evento submit
bindFormFinanceiroParcela(this);
stopLoadPage();
});
Есть ли вероятность, что я смогу привязать форму без использования команды «load», упомянутой в приведенном выше скрипте?
function openModalFinanceiroParcelaSemURL(data) {
startLoadPage();
//Create the modal window block in the body of the page
if (!$("#modalFinanceiroParcela").data('bs.modal'))
CreateModalFinanceiroParcela();
//Load modal content via ajax request
$('#contentModalFinanceiroParcela').html(data);
$('#modalFinanceiroParcela').modal({
keyboard: true,
}, 'show');
bindFormFinanceiroParcela(document.getElementById("contentModalFinanceiroParcela"));
stopLoadPage();
}
function bindFormFinanceiroParcela(dialog) {
$('form', dialog).submit(function (e, i) {
if ($(this).valid() || i) {
startLoadOneMoment();
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
if (result.success) {
window.location = window.location;
} else {
$('#contentModalFinanceiroParcela').html(result);
bindFormFinanceiroParcela();
}
stopLoadOneMoment();
}
});
return false;
} else {
return false;
}
});
function CreateModalFinanceiroParcela() {
var html = '<div class="modal modal-primary modal-system" tabindex="-1" role="dialog" id="modalFinanceiroParcela" data-backdrop="static"><div class="modal-dialog modal-dialog-centered"><div class="modal-content"><div class="content-modal-system" id="contentModalFinanceiroParcela"></div></div></div></div>';
$("body").append(html);
}
УДАЛЕНИЕ БРИТВОЙ:
@using Retaguarda.Domain.Enuns
@model Retaguarda.Application.ViewModels.Financeiro.FinanceiroParcela.FinanceiroParcelaViewModel
@{
ViewData["Title"] = "Excluir Parcela";
Layout = null;
}
<div>
<form asp-action="Delete" id="frm-excluir-financeiro-parcela">
@Html.AntiForgeryToken()
<div class="modal-shadow">
<div class="modal-header modal-header-primary">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4><i class="modal-title text-center glyphicon glyphicon-trash"></i> @ViewData["Title"] </h4>
</div>
<div class="panel">
<div class="panel-body container-fluid pt-15 pl-15 pr-15">
<div class="form-horizontal">
<vc:summary />
<br />
<div class="message-delete">
@Html.HiddenFor(model => model.Id, new { id = "hid-financeiro-parcela-id" })
<i class="icon fa-trash" aria-hidden="true"></i>
<p>
Tem certeza de que deseja excluir a parcela @(Model.Parcela)?<br />
</p>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<div class="col-md-offset-2 col-md-10">
<div class="float-right">
<div class="btn-group btn-group-sm mr-auto"
role="group">
<div class="btn-group btn-group-sm" role="group">
@*<button id="btn-excluir-financeiro-parcela" type="submit" class="btn btn-success"><i class="icon wb-check"></i> Excluir </button>*@
<button id="btn-excluir-financeiro-parcela" type="button" class="btn btn-success"><i class="icon wb-check"></i> Excluir </button>
<button id="btn-cancelar-financeiro-parcela" class="btn btn-danger" data-dismiss="modal"><i class="icon wb-close"></i> Cancelar </button>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
Вызов Ajax
$('#dtFinanceiroParcela').on('click', 'tr .btn-excluir-financeiro-parcela', function (e) {
e.preventDefault();
startLoadOneMoment();
var id = $(this).attr('data-id');
var data = { id: id };
var dataURL = jQuery.param(data);
$.ajax({
url: "/financeiro-parcela-gerenciar/remover-financeiro-parcela/" id,
type: "GET",
// data: dataURL,
contentType: "application/json",
async: false,
success: function (result) {
if (typeof result.success !== 'undefined') {
if (!result.success) {
stopLoadOneMoment();
swal("Oops", result.message, "error");
return false;
}
}
// alert(this.url);
stopLoadOneMoment();
openModalFinanceiroParcelaSemURL(result);
return false;
},
error: function () {
stopLoadOneMoment();
alert("Oops! Algo deu errado.");
return false;
}
});
Комментарии:
1. Не могли бы вы создать stackblitz.
2. Как выглядит html модального содержимого?
3. Привет, Мартин Годзина! обновил сообщение 🙂
4. Похоже, что в вашей форме нет кнопки отправки из-за комментария кнопки отправки @ *<кнопка … тип =»отправить» … *@ Содержит ли ваша форма кнопку отправки при проверке вашего html?
5. @Martin Godzina, отправка выполняется через ajax, поэтому она была удалена с кнопки (это не проблема, он он). Проблема в том, что функция bindFormFinanceiroParcela не работает, когда отображается модальный параметр. Это работает, если я загружаю с помощью jquery, но если я загружаю contentModal следующим образом: «$ (‘# contentModalFinanceiroParcela’). Html (данные)» функция bindFormFinanceiroParcela не работает.
Ответ №1:
Ваша форма внутри razor не содержит кнопки отправки, потому что она закомментирована.
@*<button id="btn-excluir-financeiro-parcela" type="submit" class="btn btn-success"><i class="icon wb-check"></i> Excluir </button>*@
Удалите комментарий или измените тип другой кнопки на «отправить»
Я предполагаю, что событие отправки успешно подключено, но никогда не вызывается из-за отсутствия кнопки отправки внутри вашей формы.