在JQuery委托中触发表单提交

时间:2019-02-02 22:37:44

标签: jquery twitter-bootstrap jquery-ui asp.net-core-mvc

我有一个Bootstrap Modal用于确认按钮单击,并想根据用户的响应提交特定的表单。除了实际的表单提交,我可以进行所有工作。这是详细信息。

在按钮并不旨在提交在其居住的形式。表单的提交按钮工作正常(并且不使用模式确认),它是表单的“常规”更新按钮。有问题的按钮用于在同一页面上提交其他表单(此按钮删除有问题的记录并使用模式确认)。值得注意的是我用来传递要提交的表单的选择器的“数据表单”属性。

<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();
    }
});

再次一切到表单提交(经由“成功”代表)正在工作。

当我把其中I定义成功代表一个断点右边和键入的一行代码包含在其中到控制台,它完美(提交所讨论的形式)。具体而言,分型:

$(self.attr("data-form")).submit()

我已验证$(self.attr(“ data-form”))确实解析为#ApplicationDelete。

这使我相信委托中对表单的引用存在范围问题,但我对JQuery / Javascript的了解不足,无法知道1)事实是否如此以及2)如何结构化引用,以便它实际上在运行时找到表单。我也无法获得在运行时命中(在委托中)的断点,因此该选项对于我来说似乎已被切断。

您可能会注意到注释掉的“ self.closest ...”,在这里不能使用它,因为我想提交除最接近的表单以外的其他表单,但是该代码在另一个与之相似但又类似于这个。

1 个答案:

答案 0 :(得分:0)

欢迎,这根本不是我想的那样。我更改了模式中按钮的类,但没有意识到它们已在showConfirmation()方法中用作选择器。

我解决此问题后,一切正常。