如何在按键时停止通过 aJax 重新发送脚本?

How to stop resending script through aJax while pressing key?

我有一个脚本,可以在按下回车键时将消息存储到数据库中。

<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"> <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 事件的相同脚本。但是脚本无法正常工作。

只需锁定以禁用 ajax 请求,直到最后一个请求完成:

var lock = false;
function checkSubmit(e)
    {

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

另一个选项可能是禁用文本区域并检查它是否被禁用而不是使用锁,但我认为你已经理解了这个例子。