【发布时间】:2019-12-26 20:43:54
【问题描述】:
我正在使用 jQuery Validate 来验证我的表单。在每次验证时,我使用submitHandler 通过 ajax 将表单提交到我的控制器(我使用的是 asp.net core 3.1,但我认为它不那么相关)。但是,通过双击提交按钮,我的应用程序会执行两个具有相同数据的条目。多次输入也会发生同样的事情。
我研究了不同的解决方案,但到目前为止没有一个对我有用。其中一些是:
jQuery preventing form from being submited twice and on enter key
Prevent double form submission
Prevent AJAX form from submitting twice?
Prevent submit form twice with change event
我的大多数表单都是模态的,也许这激发了这样的行动,但我仍然找不到有效的解决方案。所以这里是其中一种形式的示例源代码 - 所有其他形式都使用类似的结构:
有形式的模态
<div class="modal fade" id="modal-user-test" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">New Test</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Fechar">
<span aria-hidden="true">×</span>
</button>
</div>
<form id="form-user-test" autocomplete="off">
<div class="modal-body">
<div class="form-group">
<label>Name</label>
<input type="text" class="form-control form-control-sm" name="Name" placeholder="Name" maxlength="120" autocomplete="off" />
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-warning" data-dismiss="modal">Back</button>
<button class="btn btn-outline-success" type="submit">Salve</button>
</div>
</form>
</div>
</div>
</div>
要验证的 JS:
$(document).ready(function() {
$("#form-user-test").validate({
rules: {
Name: {
required: true,
minlength: 2
}
},
messages: {
Name: {
required: "The name is required",
minlength: "Enter at least two characters"
}
},
submitHandler: sendFormUserTest
});
});
提交表单的功能:
function sendFormUserTest(form) {
$.ajax({
url: `/User/Save`,
type: "POST",
dataType: "json",
data: $(form).serialize(),
success: function (resposta) {
messageSuccess(resposta.Message);
$("#modal-user-test").modal("hide");
},
error: showErrorMessage
});
}
我曾尝试在不同的地方使用event.stopPropagation(),event.preventDefault(),例如在表单提交功能中调用document ready中的valite方法之前,但没有解决方案对我有帮助。
我想在不将此问题标记为重复的情况下通知您一个解决方案,因为我引用了两次,到目前为止还没有解决方案起作用。
【问题讨论】:
-
您在文档准备好后立即调用
validate()函数?为什么? -
@ScottMarcus 这是我最后一次尝试看看它是否有效。即使在
document ready之外,问题仍然存在 -
validate()仅应在submit事件发生时调用。请出示您所有的相关代码。 -
你提到的“通过双击提交按钮”来吧!!!只要你点击它就会起作用,所以你需要在成功后隐藏或更改或禁用提交按钮
-
你提到使用
event.preventDefault(),但代码没有显示。传递给submitHandler的函数被赋予form和event。您是否在传递给sendFormUserTest函数的事件上调用preventDefault()?
标签: javascript jquery ajax asp.net-core