Как обнаружить ctrl+ v, ctrl+ cс помощью Javascript?
Мне нужно ограничить вставку в мои текстовые области, конечный пользователь не должен копировать и вставлять содержимое, пользователь должен только печатать текст в текстовой области.
Как этого добиться?
javascript
jquery
html
Ramakrishnan
источник
источник
Ответы:
Я просто сделал это из интереса. Я согласен, что это не правильно, но я думаю, что это должно быть решение оператора ... Также код можно легко расширить, чтобы добавить функциональность, а не убирать ее (например, более продвинутый буфер обмена или Ctrl+ sзапуск сервера). Сберегать).
Также, чтобы уточнить, для этого скрипта требуется библиотека jQuery.
Codepen демо
РЕДАКТИРОВАТЬ: удалены 3 лишних строки (включая e.which) благодаря предложению Тима Дауна (см. Комментарии)
РЕДАКТИРОВАТЬ: добавлена поддержка Mac ( cmdключ вместо ctrl)
источник
keydown
иkeyup
обработчикиdocument
? Вы можете проверить наличие клавиши Ctrl в$(".no-copy-paste").keydown
обработчике. Кроме того, в этом нет необходимостиe.keyCode || e.which
: онe.keyCode
работает во всех браузерах, которыеe.which
работают, поэтомуe.which
никогда не будет использоваться. Возможно, вы думали о том, как получить код символа изkeypress
события? Наконец, это ничего не изменит со вставками из контекстного меню или меню редактирования, но я полагаю, что OP не спрашивал об этом напрямую.e.metaKey
илиe.ctrlKey
бытьtrue
вместо того, чтобы назначать числовые значения клавишам и проверять их.С помощью jquery вы можете легко обнаружить копирование, вставку и т. Д., Связав функцию:
Более подробная информация здесь: http://www.mkyong.com/jquery/how-to-detect-copy-paste-and-cut-behavior-with-jquery/
источник
Хотя это может раздражать при использовании в качестве меры борьбы с пиратством, я вижу, что в некоторых случаях это может быть законным, поэтому:
Я использовал
event.ctrlKey
вместо проверки для кода ключа , как в большинстве браузеров на Mac OS X Ctrl/ Alt«вниз» и «вверх» события никогда не срабатывает, поэтому единственный способ обнаружения является использованиеevent.ctrlKey
в , например , с события после того , как Ctrlключ удерживается. Я также замещенctrlKey
сmetaKey
для Маков.Ограничения этого метода:
edit
->copy
пункт меню, например , в Firefox все еще может позволить копировать / вставить.источник
Там еще один способ сделать это:
onpaste
,oncopy
иoncut
события могут быть зарегистрированы и отменены в IE, Firefox, Chrome, Safari (с некоторыми проблемами несовершеннолетних), единственный крупный браузер , который не позволяет отменить эти события является Opera.Как вы можете видеть в моем другом ответе, перехват Ctrl+ vи Ctrl+ cсопровождается множеством побочных эффектов, но он по-прежнему не мешает пользователям вставлять с помощью
Edit
меню Firefox и т. Д.Safari по-прежнему имеет некоторые незначительные проблемы с этим методом (он очищает буфер обмена вместо вырезания / копирования при предотвращении дефолта), но эта ошибка, похоже, исправлена в Chrome.
См. Также: http://www.quirksmode.org/dom/events/cutcopypaste.html и соответствующую тестовую страницу http://www.quirksmode.org/dom/events/tests/cutcopypaste.html для получения дополнительной информации.
источник
Демонстрация в реальном времени: http://jsfiddle.net/abdennour/ba54W/
источник
Краткое решение для предотвращения использования пользователем контекстного меню, копирования и вырезания в jQuery:
Также может пригодиться отключение выделения текста в CSS:
источник
Если вы используете
ctrlKey
собственность, вам не нужно поддерживать состояние.источник
Я написал плагин jQuery, который ловит нажатия клавиш. Его можно использовать для включения многоязычного ввода сценариев в html-формах без ОС (кроме шрифтов). Это около 300 строк кода, может быть, вы хотели бы посмотреть:
Как правило, будьте осторожны с такими изменениями. Я написал плагин для клиента, потому что другие решения не были доступны.
источник
Вы можете использовать этот код для правого клика, CTRL+ C, CTRL+ V,CTRL + для Xобнаружения и предотвращения их действия
источник
вместо onkeypress используйте onkeydown.
источник
Другой подход (плагин не нужен) это просто использовать
ctrlKey
свойство объекта события, который передается внутрь. Он указывает, Ctrlбыл ли нажат во время события, например так:Смотрите также jquery: нажатие клавиш, ctrl + c (или что-то подобное) .
источник
Не забывайте, что, хотя вы можете обнаружить и заблокировать Ctrl+ C/ V, вы все равно можете изменить значение определенного поля.
Лучшим примером для этого является функция Chrome Inspect Element, которая позволяет вам изменять значение-свойство поля.
источник
у меня уже есть ваша проблема, и я решил ее с помощью следующего кода .., которые принимают только цифры
вы можете обнаружить Ctrlидентификатор
e.which == 17
источник
Вы можете прослушать событие нажатия клавиши и остановить событие по умолчанию (ввод текста), если оно соответствует определенным кодам клавиш.
источник
Важная заметка
Я использовал
e.keyCode
некоторое время, и я обнаружил, что когда я нажимаю ctrl+ ., этот атрибут возвращает неправильное число, 190, в то время как код ascii.
равен 46!Так что вы должны использовать
e.key.toUpperCase().charCodeAt(0)
вместоe.keyCode
.источник
Есть несколько способов предотвратить это.
Однако пользователь всегда сможет отключить JavaScript или просто посмотреть на исходный код страницы.
Некоторые примеры (требуется jQuery)
Редактировать: Как сказал Тим Даун, все эти функции зависят от браузера.
источник
paste
события, которое включает в себя все версии Firefox до версии 3. Во-вторых,window.clipboardData
это только IE, и я считаю, что теперь он по умолчанию отключен в IE , В-третьих, отключение всехkeydown
событий, когда нажата клавиша Ctrl, является чрезмерным: вы предотвращаете полезные сочетания клавиш, такие как Ctrl-A (выбрать все) и Ctrl-Z (отменить). В-четвертых, как уже упоминалось, это действительно плохая вещь.