Как вы обрабатываете 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');
Вот несколько полезных ссылок: