Я пытаюсь создать систему ввода текста в стиле facebook. Но у меня есть один вопрос о keypress.
Итак, мой код работает нормально, но я хочу изменить что-то еще, например keypress, keyup, paste ect.
Я использую следующие коды javascript и ajax. В следующем моем коде ajax работает как if ($.trim(updateval).length == 0) { send width notyping.php notyping.php posting 0, а 0 не отображает вводное сообщение.
Если if ($.trim(updateval).length > 13) { send with usertyping.php usertyping.php posting 1 и 1 отображается сообщение для ввода текста.
Проблема здесь, если пользователь остановлен, чтобы набрать какое-то сообщение, а затем каждый раз говорит о наборе текста. Что мне делать, чтобы исправить это, кто-нибудь может мне помочь в этом отношении?
Все коды ajax и javascript находятся здесь:
;
(function($) {
  $.fn.extend({
    donetyping: function(callback, timeout) {
      timeout = timeout || 1000; // 1 second default timeout
      var timeoutReference,
        doneTyping = function(el) {
          if (!timeoutReference) return;
          timeoutReference = null;
          callback.call(el);
        };
      return this.each(function(i, el) {
        var $el = $(el);
        // Chrome Fix (Use keyup over keypress to detect backspace)
        // thank you @palerdot
        $el.is(':input') && $el.is(':input') && $el.on('keyup keypress paste', function(e) {
          // This catches the backspace button in chrome, but also prevents
          // the event from triggering too premptively. Without this line,
          // using tab/shift+tab will make the focused element fire the callback.
          if (e.type == 'keypress' && e.keyCode != 8) return;
          // Check if timeout has been set. If it has, "reset" the clock and
          // start over again.
          if (timeoutReference) clearTimeout(timeoutReference);
          timeoutReference = setTimeout(function() {
            // if we made it here, our timeout has elapsed. Fire the
            // callback
            doneTyping(el);
          }, timeout);
        }).on('blur', function() {
          // If we can, fire the event since we're leaving the field
          doneTyping(el);
        });
      });
    }
  });
})(jQuery);
Проверка текстового значения, если оно равно 0, тогда отправить данные 0 для пользователя без ввода
$('#chattextarea').donetyping(function() {
  var typingval = $("#chattextarea").val();
  var tpy = $('#tpy').val();
  if ($.trim(typingval).length == 0) {
    $.ajax({
      type: "POST",
      url: "/notyping.php",
      data: {
        tpy: tpy
      },
      success: function(data) {
      }
    });
  } 
Проверка текстового значения > 13, а затем передача данных - 1 для ввода пользователем. (Возможно, нужно изменить этот оператор if)
if ($.trim(typingval).length > 13) {
    $.ajax({
      type: "POST",
      url: "/usertyping.php",
      data: {
        tpy: tpy
      },
      success: function(data) {
      }
    });
  }
});
Проверить и отобразить ввод пользователя:
function getTyping(){
     setInterval(function(){
         var tpy = $('#tpy').val();
           $.ajax({
            type: "POST",
            url: "/getTyping.php",
            data: { tpy: tpy },
            success: function(data) {
               $('#s').html(data);
              }
             });
         },1000);
    }   
getTyping();
HTML
<textarea id="chattextarea"></textarea>
<div id="s"></div>