2011-09-27 225 views
1

我禁用了我的輸入密鑰,以便我可以做一個ajax提交,但我想確保表單沒有提交兩次if在來自服務器的響應返回之前,用戶輸入兩次。jQuery在輸入密鑰已被禁用時,輸入密鑰已被命中後禁用輸入密鑰

在這裏,我已經禁用回車鍵和分配功能,把它稱爲submitForm()

$(document).ready(function(){ 
    offset = $("#quantity").html(); 
    $("#lastName").focus(); 
    $(document).bind("keypress" , function(e){ 
     if (e.which == 13 && (!$("#notes").is(":focus")) && (!$("#submit").is(":focus"))) { 
      submitForm(); return false; 
     } 
    }) 
    $("#submit").click(function(){ submitForm(); }); 
}); 

我試圖再次bind()其他地方,但它沒有做任何事情。我在各個地方嘗試preventDefault(),但我想我要麼把它放在錯誤的地方,否則那是錯誤的。我似乎無法得到這個工作。

我發現這個:How to disable Enter/Return Key After a function is executed because of it?,但它不回答我的問題,因爲在海報的例子中,腳本檢查框中是否有任何東西,但我想檢查我是否已經提交了。我不知道該怎麼做。我真正想要做的就是禁用回車鍵,直到我從服務器回聽ajax調用。這裏是submitForm():

function submitForm() { 
    $.post("/ajax/files" , $("#files").serialize(), function(data){ 
     filesReset(); 
     if (data != "") { 
      $("#lastInsert table tbody:last").prepend(data); 
      $("#lastInsert table tbody:last tr:first").find("td").hide(); 
      $("#lastInsert table tbody:last tr:first").find("td").fadeIn(1000); 
      $("#lastInsert table tbody:last tr:first").effect("highlight" , {"color": "aqua"}, 1000); 

      $("#lastInsert table tbody:last tr:last").remove(); 
     } else { 
      alert("Insert rejected: either insufficient criteria or the server is down."); 
      $("#hidden").click(); 
     } 
    }); 
} 

我寧願不必須做對服務器端的什麼,因爲我需要這個提交功能,以便儘可能快(這將是一個快節奏的數據輸入窗體)。

回答

3

。利用這樣的變量:

$(function(){ 

    var running = false; 

    $(document).bind("keypress" , function(e){ 
     if (e.which == 13) { 
      if(running === false) { 
       running = true; 
       submitForm(); 
      } 
      return false; 
     } 
    }) 

    $("#submit").click(function(){ 
     if(running === false) { 
      running = true; 
      submitForm(); 
     } 
    }); 

}); 
0

它更容易只是改變你的提交按鈕,你定期按鈕的使用onclick事件提交使用JavaScript形式。這樣按下輸入什麼都不做。單擊時禁用該按鈕,並在Ajax調用成功時啓用該按鈕。

+0

這是一個很好的點,這就是我所做的事情,其實'$(「#提交」)'只是一個按鈕。但'$('#hidden')'是一個提交。我離開提交的原因是因爲對於不完整的表單,在警報發生後,我使用非ajax服務器端腳本來標記帶有消息/建議的錯誤控件。 – tjb1982

+0

我不明白你爲什麼需要一個提交按鈕。 –