2017-01-20 8 views
0

Ich verwende ein PHP-Chat-Plugin. Das Problem mit diesem Chat-Plugin ist, dass es gut funktioniert, wenn die Nachricht durch Drücken der Taste gesendet wird, aber wenn es auf Eingabe gesetzt ist, ruft es zu viele Ajax-Aufrufe auf. Manchmal sendet es eine einzelne Nachricht und manchmal werden 4 5 Nachrichten gesendet. Ich habe alle Lösungen versucht, wie eine Variable definieren, auf sie einen Scheck haben, aber ich bin nicht sicher, was ich hier fehlt die Snippet-Funktion zum Senden NachrichtVerhindern mehrere AJAX-Anrufe bei Eingabe drücken

$("#text-messages-request").on("focus", "textarea.type-a-message-box", function() { 
    var ID = $(this).attr("id"); 
    var URL = $.base_url + 'ajax/add_chat_ajax.php'; 

    $('div.message-btn-target').html('<a href="#" id="' + ID + '" class="btn btn-default btn-sm send-message"><i class="glyphicon glyphicon-send"></i> ' + $.sendButton + '</a>'); 
    //$('#type-a-message').remove();  

    user_is_typing(this, ID); 

    $(this).on('blur', function() { 
     stop_type_status(); 
    }); 

    // Input Handler 
    if ($.enterIsSend == true) { 
     var running = false; 
     $(document).bind("keypress", function(e) { 
      if (e.which == 13) { 
       if (running === false) { 
        running = true; 
        send_message(ID, URL); 
       } 
       return false; 
      } 
     }); 

     $("a.send-message").on("click", function() { 
      if (running === false) { 
       running = true; 
       send_message(ID, URL); 
       $(".type-a-message-box").focus(); 
      } 
     }); 
    } else { 
     $("a.send-message").on("click", function() { 
      send_message(ID, URL); 
      $(".type-a-message-box").focus(); 
     }); 
    } 
    return false; 
}); 

Bitte helfen ich auf diesem bin stecken verwendet wird, ist für Tage . Es ist diese Echtzeit-Chat-Funktion initiiert, die, wenn beide Benutzer online sind und es hält sich ruft nach jeweils 7 Sekunden

setInterval("realtime_chat()", 7000); 
function realtime_chat() 
{ 
last_msg_id = $(".msg-div").last().attr("id"); 

var ID = $("#text-messages").attr("rel"); 

var R_URL = $.base_url + 'ajax/refresh_unreadMessages_ajax.php'; 
var URL = $.base_url + 'ajax/chat_realtime_ajax.php'; 
var I_URL = $.base_url + 'ajax/chat_last_id.php'; 

var dataString = 'id='+encodeURIComponent(ID); 


$.post(URL, dataString, function(html) { 
    var html_response = $(html); 
    var new_msg_id = html_response.attr("id"); 

    if(new_msg_id !== last_msg_id) 
    { 
     $("#text-messages").append(html); 

    } 

}) 


// deal with update counter and typing status 
$('ul#messages-stack-list li').each(function() { 
    cID = $(this).attr('id'); 
    cString = 'id='+cID; 
    type_status(cID); 
    update_unMsg_counter(R_URL, cString, cID, 'realtime'); 
}); 

title_unread_counter(); 

return false; } 

Es ist nur zu anfügen, was, wenn es eine neue Nachricht in der Datenbank gespeichert ist. und hier meine html der Textbox ist

<div id="type" class="collapse border-top"> 
<textarea type="text" class="form-control border-none" id="type-a-message- box" placeholder="Write the message"></textarea> 
</div> 

Funktion TextArea- Inhalt für immer an der Spitze ist und die Funktion Nachrichtens wird wie folgt

function send_message(ID, URL) 
{ 
    var textarea = $('textarea.type-a-message-box').val(); 
    if ($.trim(textarea).length == 0) 
    { 
     alert($.emptyBox); 
    } else { 
     $.ajax({ 
      type: "POST", 
      url: URL, 
      data: {id: ID, message: textarea}, 
      cache: false, 
      beforeSend: function() { $('#loadingDiv').show(); }, 
      error: function() { $('#loadingDiv').hide(); $('#errorDiv').html('<p>'+$.ajaxError+'</p>'); }, 
      success: function(html) { 
       $('#loadingDiv').hide(); 
       $("p.no-messages").remove(); 
       $("#text-messages-request").html(html); 
       $("#text-messages").attr("rel", ID); 
       stop_type_status(); 
       $(".type-a-message-box").focus(); 

      } 
     }); 
    } 
} 

Hoffe, dass es bei der Formulierung der Lösung

+0

Ich würde dies auf Formular senden tun. Die Nachricht sendet onSubmit. Wie wir wissen, wird OnSubmit auf Enter zugreifen. – C2486

+0

Problem ist, es ist nur ein Textfeld keine Form – user3149814

Antwort

0

helfen Anstatt Tastenkürzel verwenden Sie Keyup Ereignis.

+0

und wie Keyup wird helfen? – user3149814

+0

aber ich versuchte und löste nicht mein Problem – user3149814

+0

, wenn wir die Enter-Taste halten, dann mehrmals senden Nachricht wird ausgeführt werden. keyup wird nur ausgeführt, wenn der Benutzer den Schlüssel freigibt. aber in deinem Fall funktioniert keyup auch nicht. Kannst du die HTML Elemente und mehr deines js Codes posten? –

Verwandte Themen