在js中覆盖MVC表单提交,但随后覆盖它

时间:2016-04-11 19:29:19

标签: javascript dom javascript-events

我有一个视图,其上有一个删除按钮,在表格的每一行中创建一个表单:

    <td>
@using (Html.BeginForm("Delete", "FP/WorkItem",
            new { fId = Model.FPId, workId = @w.FId })) {
        <input name="deleteWorkItem" type="submit" value="Delete" class="btn btn-default" onclick="return confirm('Are you sure?');" />
    }
</td>

这一切都很好,但我不想要糟糕的警报对话框。我想使用像bootbox这样的好东西。所以我修改了这个以删除按钮上的onclick并添加了一些JavaScript:

$("input[name='deleteWorkItem']").click(function (e) {
    //return confirm('Delete selected item?');
    e.preventDefault();
    bootbox.confirm("Delete selected item?", function (result) {
        return result;
    });
});

如果没有preventDefault,则永远不会出现确认框。使用preventDefault,如果用户决定不删除,则表单不会回发。

我怎么能同时拥有两者?

2 个答案:

答案 0 :(得分:0)

保持e.preventDefault()和确认函数回调手动触发表单提交:

bootbox.confirm("Delete selected item?", function (result) {
    $(this).closest("form").submit()
    return result;
}.bind(this));

答案 1 :(得分:0)

您必须阻止隐藏表单而不是按钮。 查看示例:

 $("form").on("submit", function (e) {
        e.preventDefault(); //prevent default form submit

        //do the work here
    });


$("#buttonToSubmit).on("click", function(){
     //Line used to force submit the form
     $("form").off("submit").submit();
});