JQuery - 防止提交时刷新页面

Posted

技术标签:

【中文标题】JQuery - 防止提交时刷新页面【英文标题】:JQuery - Prevent Page Refresh on From Submit 【发布时间】:2020-06-29 19:06:39 【问题描述】:

我正在尝试通过 Ajax 调用 Asp.Net MVC 端点,但在提交表单时无法阻止页面刷新。

from 位于 MVC ASP.Net 视图上的 Bootstrap 模型中。

这里是表单(form.cshtml)...

@using (Html.BeginForm(null, null, FormMethod.Post, new  id = "editPropertiesForm" ))

    @Html.AntiForgeryToken()

    <div class="modal fade" id="editPropertiesModal" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="static" data-keyboard="false">

        <div class="modal-dialog modal-lg" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">Edit Properties</h5>
                </div>
                <div class="modal-body form-group">

                    <div class="container">

                        <span id="responseMessage"></span>

                        <fieldset class="border pl-1 pr-4 mb-2">
                            <legend>Core Properties</legend>

                            @*Folder*@
                            <div class="form-group row">
                                <label for="formFolderPicker" class="col-sm-3">Folder(s)</label>
                                <select id="formFolderPicker" class="selectpicker form-control col-sm-9" multiple data-live-search="true" name="folders">
                                    @*Options bound via editPropertiesFormBuilder.js*@
                                </select>
                            </div>                       
                            </div>
                        </fieldset>

                        <fieldset class="border pl-1 pr-4 mb-2">
                            <legend>Other</legend>

                            @*Notes*@
                            <div class="form-group row">
                                <label for="formNotes" class="col-sm-3">Notes</label>
                                <textarea type="text" class="form-control col-sm-9" id="formNotes" name="notes" rows="3"></textarea>
                            </div>

                        </fieldset>
                    </div>

                    <div class="modal-footer">
                        <button id="editPropertiesCloseBtn" type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                        @*<button id="editPropertiesSaveBtn" type="submit" class="btn btn-primary">Save</button>*@
                        <input id="editPropertiesSaveBtn" type="submit" value="Save" class="btn btn-primary"/>
                    </div>
                </div>
            </div>
        </div>
    </div>


这是最终将使用 Ajax 并调用 MVC 端点的 Jquery 方法...

    $("#editPropertiesForm").submit(function (event) 
        event.preventDefault();
    );

我希望event.preventDefault() 能够工作并防止页面在提交表单时重新加载,但事实并非如此。有没有人有任何想法?

【问题讨论】:

如果表单在模态中,它可能是动态创建的。尝试使用$(document).on('submit', '#editPropertiesForm', function(e) e.preventDefault(); ); 顺便说一句,我在您的代码中没有看到 editPropertiesForm 按钮。我在这里有什么遗漏吗? @RoryMcCrossan 很遗憾没用。 在这种情况下检查控制台是否有错误 @japesSophey 我没有否决你的答案,如果你需要,我可以投赞成票。我删除了我的答案,因为有人对我的投票投了反对票,所以如果答案被反对,就没有必要坐下来。 【参考方案1】:

尝试将输入类型改为按钮

<input id="editPropertiesSaveBtn" type="button" value="Save" class="btn btn-primary"/>

并在点击事件中提交表单

$("#editPropertiesSaveBtn").on("click", function (e) 
     $("#editPropertiesForm").submit();
     e.preventDefault();
 )

【讨论】:

这完成了工作,谢谢。因为我在表单上使用了 JQuery 验证,所以我必须对点击进行额外检查以确保表单有效。

以上是关于JQuery - 防止提交时刷新页面的主要内容,如果未能解决你的问题,请参考以下文章

ajax提交后如何防止页面刷新

刷新页面时如何防止表单重新提交(F5 / CTRL+R)

防止HTML表单提交刷新页面并触发另一个功能[重复]

PHP避免刷新页面重复提交

提交时停止表单刷新页面

使用Jquery时无法读取数据库,Ajax提交表单而不刷新页面