javascript - 使用JS提交时防止多个表单提交
问题描述
我正在使用 JS 提交我的表单。如何防止用户多次发送表单?
我尝试向onclick
按钮添加一个功能,例如:
<button type="button" class="btn btn-primary add_table_1" id="submit_add_table_1" onClick="this.disabled=true">Verstuur</button>
单击时确实会禁用按钮,但未提交表单。
有什么建议可以防止多次提交操作吗?
这是我提交的 JS 代码
$(document).ready(function () {
$("#add_table_1").on("submit", function(e) {
var postData = $(this).serializeArray();
var formURL='processing/factuur_add.php';
$.ajax({
url: formURL,
type: "POST",
data: postData,
success: function(data, textStatus, jqXHR) {
$('#modal_add_table_1 .modal-body').html(data);
$("#submit_add_table_1").remove();
},
error: function(jqXHR, status, error) {
console.log(status + ": " + error);
}
});
e.preventDefault();
});
$("#submit_add_table_1").on('click', function() {
$("#add_table_1").submit();
});
});
解决方案
您可以在触发 AJAX 调用之前禁用该按钮,如果出现错误,您可以重新启用它(就像您已经在成功时将其删除一样)。
像这样的东西:
$("#add_table_1").on("submit", function(e) {
$("#submit_add_table_1").prop('disabled', true);
...
下面是一个用 1 秒响应时间模拟的简单示例:
$('#b').on('click', function(){
$('#b').prop('disabled', true);
$('#c').text(parseInt($('#c').text(), 10) + 1);
setTimeout((()=>$('#b').prop('disabled', false)), 1000);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="b">Submit</button>
<p>Click count: <span id="c">0</span><p>
<p>(try clicking the button multiple times)</p>
推荐阅读
- nginx - Kubernetes 定向时是否需要包含端口?
- lance - 多个游戏实例
- javascript - 将请求的文件从 API 传输到 API:NestJS(HttpService: Axios) 到 Python(flask)
- c - 如何用严格的系统调用交换 STDIO.H 库函数?
- python - 未能找到可以处理输入的数据适配器:
, ( 包含类型 {" "}) - elasticsearch - Elasticseach 的模型如何转化为这些高可用性模式?
- r - 如何在 .Machine 中增加 $double.xmax?
- matlab - 如何从 Matlab 中的回调函数中获取数据以进行进一步处理?
- c++ - 调试断言失败缓冲区!= nullptr
- php - 使用 Cron 作业时未定义的 REMOTE_ADDR - Laravel 的背包