Захват текста, вставляемого в текстовое поле с помощью JQuery
Мне нужно взять событие вставки текстовой области, используя JQuery. Я пробовал следующий код, но он не работает...
$(document).ready(function()
{
$('#txtcomplaint').keyup(function()
{
TextCounter('txtcomplaint','counterComplaint', 1000 );
})
$('#txtcomplaint').onpaste(function()
{
alert()
//TextCounter('txtcomplaint','counterComplaint', 1000 );
})
});
Ответы
Ответ 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() {});
Возможно, изменение не является существенным.