2010-02-11 1 views
13

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

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

ответ

21

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

$("#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); 
}); 
+0

Этот метод работает, если вы нажмете Ctrl + V для вставки. Но это не работает, если вы щелкните правой кнопкой мыши и выберите «Вставить». – JohnnyLinTW

+6

Я нашел, если изменился на $ ("# txtcomplaint"). Bind ('paste', null, function (e) ... и он отлично работает для Ctrl + V и мыши. – JohnnyLinTW

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

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

+0

Вы не получите скопированный текст, используя этот метод. – rahul

+0

@rahul: Он только хочет использовать это событие для подсчета текста морские свиньи. –

1

Я наконец получил эту работу 1) печатать, 2) перетаскивание, 3) Ctrl-V и 4) вставить из контекстного меню мыши щелчок, но мне пришлось приложить пасту и уронить обработчик документа (где «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 мс, это не так).

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^