我正在使用具有单个输入的表单,如下所示:
<form action="" method="POST" id="myForm" name="myForm">
<input type="text" name="myInput" id="myInput" maxlength="9" OnKeyPress="checkMyForm();" onKeyUp="checkMyForm();" onChange="checkMyForm();" />
<button id="btnSubmit" class="btnSubmit" >Submit</button>
</form>
JS函数检查输入,如果它满意,则等待1.25秒,然后按如下方式提交表单:
function checkMyForm () {
var input = document.getElementById("myInput");
var form = document.getElementById("myForm");
if ( /* check the input here */) {
setTimeout(function() {
// submit the form
$("#myForm").submit(); }, 1250);
}
else {
// do nothing
}
}
if
语句检查输入的长度。如果我输入(7个字符) - 它执行6-7次。如果我粘贴它 - 它执行两次。我有办法阻止多表格提交吗?
我已经实现了这个目标:
$(document).ready(function() {
$("#myForm").submit(function(event) {
// disable the submit/print button
document.getElementById('btnSubmit').disabled = true;
// prevent resubmission of the form
$(this).submit(function() {
return false;
});
// prevent page refresh
event.preventDefault();
// contineu with my stuff to submit the form
$.ajax({
url: 'index.php',
type: 'post',
data: {
"myInput" : $('#myInput').val(),
},
success: function(response) {
if(!alert(response)) {
// do my thing here
}
}
});
}
}
阻止实际运行PHP端代码提交表单;但alert
无论如何都被触发(如果粘贴则为两次,如果输入则为5-7次)。如何防止多次提交和响应返回?
答案 0 :(得分:3)
我假设你的checkMyForm()函数实际上是你的check_promisLot()函数,你应该改变它。
你有没有尝试过clearTimeout,它会像这样;
var delayExec;
function check_promisLot () {
clearTimeout(delayExec);
var input = document.getElementById("myInput");
var form = document.getElementById("myForm");
if ( /* check the input here */) {
delayExec = setTimeout(function() {
// submit the form
$("#myForm").submit(); }, 1250);
}
else {
// do nothing
}
}
基本上,每次更新触发事件发生时,请尝试重置计时器。