У меня есть Bootstrap Modal для подтверждения нажатия кнопки и я хочу отправить конкретную форму, основанную на ответе пользователя.У меня все работает, кроме фактической подачи формы.Вот подробности.
Кнопка не предназначена для отправки формы, в которой она живет.Кнопка отправки формы работает нормально (и не использует модальное подтверждение), это «обычная» кнопка обновления формы.Данная кнопка предназначена для отправки другой формы на той же странице (эта кнопка удаляет соответствующую запись и использует модальное подтверждение).Следует отметить атрибут «data-form», который я использую для передачи селектора для формы, которую я хочу отправить.
<button id="CancelApplication" type="button" class="btn btn-outline-primary btn-sm delete-event" data-form="#ApplicationDelete" data-toggle="modal" data-target="#confirmationModal" data-dismiss="modal" data-confirmation="You are about to cancel your application!" data-confirmation-title="Cancel Application">Cancel Application</button>
Вот форма, которую я хочу отправить, если пользователь подтвердит через модал:
<form id="ApplicationDelete" asp-action="Delete" asp-antiforgery="true" method="post">
<input type="hidden" asp-for="CampaignId" />
</form>
Вот Jquery:
showConfirmation = function (title, message, success, cancel) {
title = title ? title : 'Are you sure?';
var modal = $("#confirmationModal");
modal.find(".modal-title").html(title).end()
.find(".modal-body").html(message).end()
.modal({ backdrop: 'static', keyboard: false })
.on('hidden.bs.modal', function () {
modal.unbind();
});
if (success) {
modal.one('click', '.modal-footer .btn-primary', success);
}
if (cancel) {
modal.one('click', '.modal-header .close, .modal-footer .btn-default', cancel);
}
};
$(document).on("click", ".delete-event", function (event) {
event.preventDefault();
var self = $(this);
var success = function () {
$(self.attr("data-form")).submit();
//self.closest('form').trigger('submit');
};
var cancel = function () {
};
if (self.data('confirmation')) {
var title = self.data('confirmation-title') ? self.data('confirmation-title') : undefined;
var message = self.data('confirmation');
showConfirmation(title, message, success, cancel);
} else {
success();
}
});
Опять же, все до отправки формы (через делегата "success") работает.
КогдаЯ ставлю точку останова там, где я определяю делегат успеха и печатаю в консоли единственную строку кода, она отлично работает (отправка рассматриваемой формы).В частности, набрав:
$(self.attr("data-form")).submit()
Я проверил, что $ (self.attr ("data-form")) разрешается в # ApplicationDelete.
Это заставляет меня думать, что у меня естьпроблема области со ссылкой на форму в делегате, но я не знаю достаточно о JQuery / Javascript, чтобы знать 1) если это действительно так и 2) как структурировать ссылку, чтобы она действительно находила форму при запускевремя.Я также не могу получить точку останова, которая срабатывает (в делегате) во время выполнения, так что эта опция, кажется, для меня обрезана.
Вы можете заметить закомментированное «self.closest ...»,который я не могу использовать здесь, потому что я хочу отправить форму, отличную от самой близкой, но этот код работает в другом приложении, которое отличается, но похоже на это.