Подтвердить что ты не робот

Захват текста, вставляемого в текстовое поле с помощью JQuery

Мне нужно взять событие вставки текстовой области, используя JQuery. Я пробовал следующий код, но он не работает...

$(document).ready(function()
{ 
  $('#txtcomplaint').keyup(function()
  {  
     TextCounter('txtcomplaint','counterComplaint', 1000 ); 
  }) 
  $('#txtcomplaint').onpaste(function()
  {  
     alert()
     //TextCounter('txtcomplaint','counterComplaint', 1000 ); 
  }) 
});
4b9b3361

Ответ 1

Вы можете сделать что-то вроде этого

$("#txtcomplaint").bind('paste', function(e) {
    var elem = $(this);

    setTimeout(function() {
        // gets the copied text after a specified time (100 milliseconds)
        var text = elem.val(); 
    }, 100);
});

Ответ 2

$('#txtcomplaint').bind('paste', function(e){ alert('pasting!') });

Для дополнительного ресурса посмотрите здесь.

Ответ 3

Я, наконец, получил это, чтобы работать для 1) ввода, 2) перетащить, 3) Ctrl-V и 4) вставить из контекстного меню щелчка мыши, но мне пришлось прикрепить пасты и обработчики отбрасывания к document (где "taValue" - это класс текстовых полей, которые я пытаюсь контролировать):

        $(document).on("paste drop", '.taValue', function (e) {
          myHandler.call(e.target, e);
        });

Событие keyup на текстовом поле уже сработало. Следующая проблема заключалась в том, что события пасты и падения срабатывают до того, как текст в текстовом поле фактически изменится. В моем случае я хотел сравнить новый текст с исходным текстом. Я прибегал к setTimeout:

    function myHandler(e) {
      if (e && (e.type === "drop" || e.type === "paste")) {
        var me = this;
        setTimeout(function () { myHandler.call(me) }, 200);
      }... [more code to do the comparison]

Я ненавижу использование тайм-аутов для таких вещей, но это работает (когда я пробовал интервал в 100 мс, это не так).

Ответ 4

Это наиболее полезное решение:

$("#item_name").bind("input change", function() {});

Возможно, изменение не является существенным.