Как отключить вставку (Ctrl+V) с помощью jQuery?

Как отключить параметр «Вставить» (Ctrl+V) с помощью jQuery в одном из текстовых полей ввода?


person Misam    schedule 01.04.2011    source источник
comment
Почему ты бы так поступил? Если вы отключите Ctrl + V, это расстроит более одного пользователя. кроме того, вы всегда можете щелкнуть правой кнопкой мыши и выбрать вставить   -  person Christophe    schedule 01.04.2011
comment
@krike, может быть, чтобы заставить людей повторно вводить свой адрес электронной почты или пароль?   -  person greggreg    schedule 01.04.2011
comment
Я отключу JS в браузере и могу поставить ctrl+v в любое время.   -  person Kamilos    schedule 01.04.2011
comment
@Камилос, что, если для запуска сайта требуется javascript?   -  person greggreg    schedule 01.04.2011
comment
@Камилос, а как насчет банковского дела или фейсбука? если вы отключите javascript, мы не сможем даже публиковать комментарии при переполнении стека.   -  person greggreg    schedule 01.04.2011
comment
@greg: заставить людей повторно набирать свой адрес электронной почты - и скажите, пожалуйста, какой в ​​этом смысл? Если вы уже придумываете бессмысленные трюки, например дважды набираете свой адрес, чтобы проверить, помните ли вы его на самом деле, а затем копаетесь в моем буфере обмена, просто чтобы показать мне, кто здесь главный, я ухожу — если что — это попытка произвести хорошее первое впечатление, то я полностью ожидаю, что сайт будет ужасным.   -  person Piskvor left the building    schedule 01.04.2011
comment
Основано на реальной истории: я знаю, что это старо, но вот совершенно правильный случай, когда нужно попросить пользователя повторно ввести адрес электронной почты: пользователь покупает онлайн-билеты на мероприятие, он не зарегистрирован на веб-сайте, и единственный способ, которым он получит свои билеты, - это указанный адрес электронной почты. Если пользователь неправильно напишет адрес, он не получит билеты. Затем он будет винить дерьмовую систему, которая не работает, и не отправляет заявки, и дает команде поддержки больше работы, отправляя тонны электронных писем и телефонных звонков.   -  person hectorg87    schedule 21.04.2014
comment
Отключение вставки — это кошмар безопасности. Разумные пользователи используют менеджер паролей с длинными случайными паролями, которые никто не может запомнить. Пользователь копирует и вставляет пароли из диспетчера паролей в логин, таким образом, получая выгоду от надежных, уникальных паролей для каждого веб-сайта и устойчивости к вредоносным программам и оборудованию, регистрирующим клавиатуру.   -  person David Johnston    schedule 13.10.2015
comment
Менеджеры паролей @DavidJohnston теперь имеют опцию автозаполнения   -  person daVe    schedule 23.11.2015
comment
@daVe ... которые имеют свои последствия для безопасности. Кроме того, умная веб-страница может предотвратить это.   -  person David Balažic    schedule 06.04.2017
comment
Другая ситуация, в которой это будет допустимо, — это поле ввода текста, которое имитирует числовой/десятичный ввод (это может быть лучшим решением, если вы хотите установить правильный десятичный разделитель для многоязычных приложений, так как числовой/десятичный ввод по умолчанию не справляется с этим очень хорошо ). Очевидно, вы можете запретить пользователям вставлять туда некоторые недопустимые строки. Поэтому я бы предпочел сосредоточиться на самом вопросе, чем спорить о том, правильно ли чье-то решение или нет, особенно если мы не знаем никаких деталей.   -  person Daniel Stasiak    schedule 10.04.2020


Ответы (9)


Теперь это правильно работает для IE FF Chrome... Хотя я не тестировал другие браузеры

$(document).ready(function(){
   $('#txtInput').on("cut copy paste",function(e) {
      e.preventDefault();
   });
});

Изменить: как указано webeno, .bind() устарело, поэтому вместо этого рекомендуется использовать .on().

person Misam    schedule 01.04.2011
comment
$('#txtInput').bind(contextmenu,function(e){ e.preventDefault(); });//Это отключает щелчок правой кнопкой мыши - person Misam; 01.04.2011
comment
Интересно, я не знал, что такие события существуют. Я нашел эту страницу в режиме причуд браузера, которая дает информацию о совместимости между браузерами для этих событий: quirksmode.org/dom/events/cutcopypaste.html - person DannyLane; 01.04.2011
comment
Safari также поддерживает это. - person Hannes Karppila; 09.06.2015
comment
вау, это здорово! Вы можете отключить контекстное меню, но самое главное, что это не обязательно! - person daVe; 23.11.2015
comment
ПРИМЕЧАНИЕ Начиная с jQuery 3.0 функция .bind() устарела. Он был заменен методом .on() для присоединения обработчиков событий к документу, начиная с jQuery 1.7, поэтому его использование уже не рекомендовалось. -- Источник: api.jquery.com/bind - person benomatis; 09.03.2018
comment
cut, copy и paste являются экспериментальными (но я считаю, что они широко поддерживаются) - person oldboy; 07.11.2020

Изменить: почти 6 лет спустя, глядя на это сейчас, я бы не рекомендовал это решение. Принятый ответ определенно намного лучше. Иди с этим!


Кажется, это работает.

Вы можете прослушивать события клавиатуры с помощью jQuery и предотвращать завершение события, если это комбинация клавиш, которую вы ищете. Обратите внимание, проверьте 118 и 86 (V и v)

Рабочий пример здесь: http://jsfiddle.net/dannylane/9pRsx/4/

$(document).ready(function(){
    $(document).keydown(function(event) {
        if (event.ctrlKey==true && (event.which == '118' || event.which == '86')) {
            alert('thou. shalt. not. PASTE!');
            event.preventDefault();
         }
    });
});

Обновление: нажатие клавиши не срабатывает в IE, вместо этого используйте нажатие клавиши.

person DannyLane    schedule 01.04.2011
comment
Не будет работать для щелчка правой кнопкой мыши + вставки или для этих мультимедийных клавиш; Они используют механизмы, отличные от сочетаний клавиш. Кроме того, вы предполагаете, что вставка всегда и только при Ctrl+V - person Piskvor left the building; 01.04.2011
comment
@Piskvor Я не делаю никаких предположений, вопрос был в том, как отключить ctrl+v, на что я и ответил. - person DannyLane; 01.04.2011
comment
@DannyLane: Вы правы. Я понял, что вопрос заключается в том, чтобы полностью отключить вставку, но это может быть не то, чего хочет ОП. - person Piskvor left the building; 01.04.2011
comment
Спасибо за это - использовал нажатие клавиши и не мог понять, почему это не работает в IE - person Addsy; 21.06.2011
comment
@DannyLane: на разных платформах могут быть разные привязки клавиш для действия вставки. - person dma_k; 10.09.2015

Начиная с JQuery 1.7 вы можете вместо этого использовать метод on

$(function(){
    $(document).on("cut copy paste","#txtInput",function(e) {
        e.preventDefault();
    });
});
person Steve Chan    schedule 18.04.2014

Я попробовал это в своем проекте Angular, и он отлично работал без jQuery.

<input type='text' ng-paste='preventPaste($event)'>

И в части сценария:

$scope.preventPaste = function(e){
   e.preventDefault();
   return false;
};

В проекте без углов используйте «onPaste» вместо «ng-paste» и «event» вместо «$ event».

person Abhishek    schedule 03.08.2014

Следующий код отключит вырезание, копирование и вставку с полной страницы.

$(document).ready(function () {
   $('body').bind('cut copy paste', function (e) {
      e.preventDefault();
   });
});

Полный учебник и рабочую демонстрацию можно найти здесь — Отключить вырезание, копирование и вставку с помощью jQuery

person JoyGuru    schedule 10.11.2015

Вы можете поймать ключевое событие:

function checkEventObj ( _event_ ){
    // --- IE explorer
    if ( window.event )
        return window.event;
    // --- Netscape and other explorers
    else
        return _event_;
}

document.keydown = function(_event) {
    var e = checkEventObject(_event);

    if( e.ctrlKey && (e.keyCode == 86) )
        window.clipboardData.clearData();
}

Не проверял, но может помочь.

Источник из comentcamarche и Zakaria.

person canardman    schedule 01.04.2011
comment
window.clipboardData.clearData() работает только в ie. Если вы ловите событие, вы можете просто предотвратить значение по умолчанию и вернуть false. это эффективно отключит вставку, инициируемую клавиатурой. Я бы опубликовал пример, но мне лень, и к тому же вы уже так близко. - person greggreg; 01.04.2011

$(document).ready(function(){
  $('#txtInput').live("cut copy paste",function(e) {
    e.preventDefault();
  });
});

В текстовом поле живое событие вырезания, копирования, вставки предотвращается, и оно работает хорошо.

person Vikas Bansal    schedule 28.01.2015
comment
'live' устарел в новой библиотеке jQuery. Вместо этого вы можете использовать «on». - person Misam; 28.01.2015
comment
$(document).ready(function(){...}) можно было бы переписать в эквивалент $(function(){...}). - person dma_k; 10.09.2015
comment
Также можно использовать выражение немедленно вызываемой функции (IIFE).(function() { }()); - person Vikas Bansal; 17.09.2015

Я протестировал проблему в браузере Chrome, и она у меня работает. Ниже приведено решение для предотвращения вставки кода в текстовое поле, а также для предотвращения щелчка правой кнопкой мыши.

   $(".element-container").find('input[type="text"]').live("contextmenu paste", function (e) {

    e.preventDefault();
});
person Chirag Prajapati    schedule 27.12.2017

person    schedule
comment
Ответ скопирован - person Manoj Kadolkar; 17.09.2019