2015-01-02 58 views
0

當輸入鍵被按下時,我有一個將消息存入數據庫的腳本。如何在按鍵時通過aJax停止重新發送腳本?

<textarea class="comment" name="comment" id="comment" onKeyPress="return checkSubmit(event)" onKeyDown="return checkTypingStatus(event)" >Comment/Reply</textarea> 

function checkSubmit(e) 
    { 

     if(e && e.keyCode === 13) 
     { 

       var sender = <?=$_REQUEST['sender'];?>; 
       var user_id = <?=$_SESSION['userid'];?>; 
       var cid = <?=$_REQUEST['cid'];?>; 

       var comment = $("#comment").val(); 

       comment = encodeURIComponent(comment); 

       var dataString = 'sender='+ sender + '&user_id=' + user_id + '&comment=' + comment + '&cid=' + cid; 

         if(comment=='' || comment=='Comment%2FReply') 
         { 
          alert('Please Give some text into message box.'); 
         } 
        else 
         { 
         $("#flash").show(); 
         $("#flash").fadeIn(400).html('<img src="images/ajax-loading.gif" align="absmiddle">&nbsp;<span class="loading">Sending Message...</span>'); 
        $.ajax({ 
           type: "POST", 
           url: "ajax_comment.php", 
           data: dataString, 
           cache: false, 
           success: function(html){ 

             $("p#update").append(html); 
             $("p#update").fadeIn("slow"); 
             document.getElementById('comment').value=''; 
             $("#comment").focus(); 


             $("#flash").hide(); 
           } 
          }); 
         }  
         return false; 

     } 
    } 

一切工作,除非用戶保持按壓輸入很長一段時間,直到進入被釋放了同樣的信息被存儲多次關鍵沒關係。

我已經嘗試了與onKeyUp事件相同的腳本。但是腳本不能按原樣運行。

+0

這看起來更像是一個可用性問題,然後是一個編程問題。您是否考慮在請求正在處理時禁用'textarea'?這很常見,許多用戶(包括我自己)會期望 – blgt

+0

您可以考慮使用onkeyup事件 –

回答

2

只要把鎖禁用AJAX請求,直到最後一個完成:

var lock = false; 
function checkSubmit(e) 
    { 

     if(e && e.keyCode === 13 && !lock) 
     { 
     lock = true; 
     .... 
     $.ajax({ 
     .... 
     success: function(html){ 
      lock = false; 
     ... 

的另一個選項可以禁用文本區域,並檢查它是否禁用與否,而不是使用鎖,但我想你用這個例子得到了想法。

+0

非常感謝。這個鎖定概念起作用。非常感謝。 :) – sana