Как вы обрабатываете oncut, oncopy и onpaste в jQuery?

документация jQuery говорит, что библиотека имеет встроенную поддержку следующих событий: размытие, фокус, загрузка, изменение размера, прокрутка, выгрузка, клик, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, изменение, выбор, отправка, сбой, нажатие клавиши, активация клавиатуры и ошибка.

Мне нужно обрабатывать события вырезания, копирования и вставки. Как лучше всего это сделать? FWIW, мне нужно только беспокоиться о WebKit (мне повезло!).

UPDATE: Я работаю над "виджетами" в подобной Dashboard среде. Он использует WebKit, поэтому мне действительно важно (для моих целей) поддерживать ли эти события там, на которые он похож.

Ответ 1

Вы можете добавлять и удалять события любого рода с помощью .on() и off()

Попробуйте это, например

jQuery(document).on('paste', function(e){ alert('pasting!') });

jQuery на самом деле совершенно безразлично, поддерживает ли тип события, который вы назначаете, браузером, поэтому вы можете назначать произвольные типы событий для элементов (и общих объектов), таких как:

jQuery('p').on('foobar2000', function(e){ alert(e.type); });

В случае пользовательских типов событий вы должны .trigger() их "вручную" в своем коде, например:

jQuery('p').trigger('foobar2000');

Аккуратный eh?

Кроме того, чтобы работать с собственными/настраиваемыми событиями DOM с помощью кросс-браузера, вам может потребоваться использовать/написать "плагин событий jQuery"... пример которого можно увидеть в jquery.event.wheel.js Брэндон Аарон Плагин Mousewheel

Ответ 2

Различные события буфера обмена доступны в Javascript, хотя поддержка является пятнистой. В QuicksMode.org есть сетка совместимости и тестовая страница. События не отображаются через jQuery, поэтому вам придется либо расширить библиотеку, либо использовать собственные события Javascript.

Ответ 3

Mozilla поддерживает событие "ввода", с которым мне трудно найти полезную документацию. По крайней мере, я знаю, что он срабатывает при вставке.

   this.addEventListener('input',
    function(){//stuff here},
    false
   );

Ответ 4

В качестве jQuery 1.7 вы можете использовать методы bind (...) и unbind (...) для прикрепления и удаления обработчиков соответственно.

Ниже приведены примеры, на которые вы можете ссылаться:

$('#someElementId').bind('paste', function(){return false;});

- этот будет блокировать любые попытки вставить из буфера обмена в тело элемента. Вы также можете использовать вырезать, копию и другие как типы событий (см. Ниже ссылки)

$('#someElementId').bind('copy', function(){return alert('Hey fella! Do not forget about copyrights!');});

Итак, в других случаях, когда вы хотите удалить эти обработчики, вы можете использовать метод unbind():

$('#someElementId').unbind('copy');

Вот несколько полезных ссылок: