Как вы обрабатываете нарезку, копирование и вставку в jQuery? - PullRequest
65 голосов
/ 26 октября 2008

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

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

ОБНОВЛЕНИЕ: я работаю над "виджетом" в среде, подобной Dashboard. Он использует WebKit, поэтому для меня действительно имеет значение (для моих целей), поддерживаются ли эти события там, как они выглядят.

Ответы [ 4 ]

90 голосов
/ 27 октября 2008

Вы можете добавлять и удалять события любого вида, используя методы .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');

Аккуратно, а?

Кроме того, для работы с проприетарными / настраиваемыми событиями DOM кросс-браузерно-совместимым способом вам может понадобиться использовать / написать «плагин событий jQuery» ... пример которого можно увидеть в jquery.event.wheel.js Плагин Brandon Aaron's Mousewheel

14 голосов
/ 26 октября 2008

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

7 голосов
/ 27 октября 2008

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

   this.addEventListener('input',
    function(){//stuff here},
    false
   );
1 голос
/ 02 сентября 2015

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

Вот примеры выравнивания вашего вопроса:

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...