2014-05-14 60 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