2013-05-02 67 views
0

我有一個用戶輸入消息的文本字段,點擊輸入並將其提交到數據庫中。問題是,它總是提交多次,具體取決於按下Enter鍵的毫秒數。我實際上並沒有進行任何現場驗證,這更多的是在學習時的概念驗證。另外我知道我可以在一次提交後完全禁用提交表單,但我希望能夠繼續輸入消息。如何防止表單提交連續發射?

<input type="text" placeholder="Enter message" id="enterMsg"> 
$(document).ready(function() { 
    $("#enterMsg").submit(function(){ 
    var uid = $("#enterMsg").val(); 
    Messages.insert({text: uid}); 


    }) 

我應該使用不同的html標記或jQuery功能嗎?

+0

我認爲你可以在完成你正在做的事情之後手動觸發表單提交。 – 2013-05-02 15:50:46

回答

0

既然你承認這是純粹的acedemic,因爲沒有一個心智正常的人會部署這個東西不安全.. 。

你可以有一個全局變量將確定提交應該被接受還是被拒絕。在接受提交之前,請檢查全局變量。如果它設置爲TRUE,則接受提交併立即將全局變量設置爲FALSE。創建一個例如1秒的超時將全局變量重置爲TRUE。

這將只允許從給定用戶每秒提交一次。

<form id="myform"> 
<input type="text" placeholder="Enter message" id="enterMsg"> 
<input type="submit" /> 
</form> 
var accept_flag = true; 
time_between_submissions = 1000; 
$(document).ready(function() { 
    $("#myform").submit(function(){ 
    if (accept_flag) { 
     var uid = $("#enterMsg").val(); 
     Messages.insert({text: uid}); 
     accept_flag = false; 
     setTimeout(function() { accept_flag = true; },time_between_submissions); 
    } 


}); 

當然,就沒有今天只要表單提交問題,因爲如果你做一個適當的POST表單提交,瀏覽器是不會允許它通過按住重新提交回車鍵。

如果你通過AJAX來做這件事,你不會使用.submit()方法,你會在窗體上監聽一個keyPress事件,然後是的,你需要實現一種方法來節流意見書。

+0

對於stackoverflow還是一個新東西,我猜測我還不能滿足,只有一個答案可以標記爲正確。但是,感謝你們兩位,絕對讓我走上了正確的道路。非常感謝你。 – iksose 2013-05-02 17:29:15

1

嗯,我認爲你不能有一個文本域的.submit()。我會用一個表單來做這件事。

HTML:

<form id="myform"> 
    <input type="text" placeholder="Enter message" id="enterMsg" /> 
</form> 

JS:

$(document).ready(function() { 
    var submitted = false; 
    $("#myform").submit(function(e){ 
    e.preventDefault(); 
    if(!submitted) { 
     var uid = $("#enterMsg").val(); 
     Messages.insert({text: uid}); 
     submitted = true; /* You can clear the input or hide the form, or something */ 
    } 

    }); 
}); 

JSFIDDLE