2014-05-14 61 views
0

我使用具有单个输入端的形式,如下所示:防止JS功能/表单提交的多个执行

<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次,则为两次)。我怎样才能防止多次提交和回复?

+2

其中是您在输入字段中使用的checkMyForm()方法吗? – Mivaweb

+1

我是否正确地假设'check_promisLot()'是'checkMyForm()'?你是否想在满足特殊条件时提交表格?例如。如果输入有9个字符?如果是这样,请发布条件。 – nils

+0

是的。我的错误。 - 'value.length <7' – KingsInnerSoul

回答

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 
     } 
} 

本质上,每次发生更新触发事件时都要尝试重置计时器。

+0

工作就像一个魅力!谢谢。 – KingsInnerSoul

+0

我实际上面临另一个问题。如果我不按下“返回”键,它将处理表格并仅吐出一个“警报”。但是,如果我按回车键足够快,它会旋转两个“警报”。任何想法如何防止这种情况发生? – KingsInnerSoul