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

时间:2015-01-02 13:10:01

标签: javascript php jquery ajax messaging

我有一个脚本,当按下回车键时将信息存储到DB中。

<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事件中尝试过相同的脚本。但是脚本不能正常工作。

1 个答案:

答案 0 :(得分:2)

只需设置一个锁即可禁用ajax请求,直到最后一个请求完成:

var lock = false;
function checkSubmit(e)
    {

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

另一种选择可能是禁用textarea并检查它是否被禁用而不是使用锁定,但我认为您已经了解了这个示例。