Wie deaktiviere ich das Einfügen (Strg + V) mit jQuery?


73

Wie kann ich die Option Einfügen ( Ctrl+ V) mit jQuery in einem meiner Eingabetextfelder deaktivieren ?


11
Warum würdest du das tun? Es würde mehr als einen Benutzer frustrieren, wenn Sie Strg + v deaktivieren. Außerdem können Sie immer mit der rechten Maustaste klicken und Einfügen auswählen
Christophe

7
@krike vielleicht, um Leute zu zwingen, ihre E-Mail-Adresse oder ihr Passwort erneut einzugeben?
Greggreg

5
Ich werde JS im Browser deaktivieren und kann jederzeit Strg + V setzen.
Kamilos

7
@Kamilos was ist mit Banking oder Facebook? Wenn Sie Javascript deaktivieren, können wir nicht einmal Kommentare im Stapelüberlauf veröffentlichen.
Greggreg

17
@greg: "um die Leute zu zwingen, ihre E-Mail-Adresse erneut einzugeben" - und bitte sagen Sie, worum geht es dabei? Wenn Sie bereits sinnlose Tricks wie "Geben Sie Ihre Adresse zweimal ein, um zu sehen, ob Sie sich tatsächlich daran erinnern" einrichten und dann mit meiner Zwischenablage herumspielen, um mir zu zeigen, wer verantwortlich ist, gehe ich - wenn das ein Versuch ist Um einen guten ersten Eindruck zu hinterlassen, erwarte ich, dass die Seite schrecklich ist.
Piskvor verließ das Gebäude am

Antworten:


181

Dies funktioniert jetzt für IE FF Chrome ordnungsgemäß ... Ich habe jedoch nicht für andere Browser getestet

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

Bearbeiten: Wie von webeno hervorgehoben , .bind()ist es veraltet, daher wird empfohlen, .on()stattdessen zu verwenden .


12
$ ('# txtInput'). bind ("Kontextmenü", Funktion (e) {e.preventDefault ();}); // Dies deaktiviert den Rechtsklick
Misam

3
Interessanterweise wusste ich nicht, dass diese Ereignisse existieren. Ich habe diese Seite im Browser-Quirks-Modus gefunden, die Informationen zur browserübergreifenden Kompatibilität für diese Ereignisse enthält: quirksmode.org/dom/events/cutcopypaste.html
DannyLane

Safari unterstützt dies ebenfalls.
Hannes Karppila

Wow, das ist großartig! Sie können das Kontextmenü deaktivieren, aber das Beste ist, dass es nicht erforderlich ist!
daVe

1
HINWEIS "Ab jQuery 3.0 ist .bind () veraltet. Es wurde seit jQuery 1.7 durch die .on () -Methode zum Anhängen von Ereignishandlern an ein Dokument ersetzt, sodass von seiner Verwendung bereits abgeraten wurde." - Quelle: api.jquery.com/bind
benomatis

21

Bearbeiten: Es ist fast 6 Jahre später, wenn ich mir das jetzt anschaue, würde ich diese Lösung nicht empfehlen. Die akzeptierte Antwort ist definitiv viel besser. Mach mit!


Das scheint zu funktionieren.

Sie können Tastaturereignisse mit jQuery abhören und verhindern, dass das Ereignis abgeschlossen wird, wenn es die gesuchte Tastenkombination ist. Beachten Sie, überprüfen Sie 118 und 86 ( Vund v)

Arbeitsbeispiel hier: 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();
         }
    });
});

Update: Tastendruck wird im IE nicht ausgelöst, verwenden Sie stattdessen Keydown.


Funktioniert nicht für Rechtsklick + Einfügen oder für diese "Multimedia-Tasten". Diese verwenden andere Mechanismen als Tastaturkürzel. Außerdem nehmen Sie an, dass Paste immer und nur bei Strg + V ist
Piskvor verließ das Gebäude am

@Piskvor Ich mache keine Annahmen, die Frage war, wie man Strg + V deaktiviert, was ich beantwortet habe.
DannyLane

@DannyLane: Du hast recht. Ich habe die Frage als "Paste insgesamt deaktivieren" verstanden, aber das ist möglicherweise nicht das, was das OP will.
Piskvor verließ das Gebäude am

Vielen Dank dafür - benutzte Tastendruck und konnte nicht herausfinden, warum es im IE nicht funktionierte
Addsy

@DannyLane: Auf verschiedenen Plattformen können unterschiedliche Tastenkombinationen für die Aktion "Einfügen" vorhanden sein.
dma_k

10

Ab JQuery 1.7 möchten Sie möglicherweise stattdessen die on-Methode verwenden

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

4
jQuery('input.disablePaste').keydown(function(event) {
    var forbiddenKeys = new Array('c', 'x', 'v');
    var keyCode = (event.keyCode) ? event.keyCode : event.which;
    var isCtrl;
    isCtrl = event.ctrlKey
    if (isCtrl) {
        for (i = 0; i < forbiddenKeys.length; i++) {
            if (forbiddenKeys[i] == String.fromCharCode(keyCode).toLowerCase()) {
                 return false;
            }
        }
    }
    return true;
});

4

Ich habe dies in meinem Angular-Projekt versucht und es hat ohne jQuery gut funktioniert.

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

Und im Skriptteil:

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

Verwenden Sie in nicht eckigen Projekten 'onPaste' anstelle von 'ng-paste' und 'event' anstelle von '$ event'.



1

 $(document).ready(function(){
   $('#txtInput').on("cut copy paste",function(e) {
      e.preventDefault();
   });
});
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="text" id="txtInput" />


0

Sie können das Schlüsselereignis abfangen:

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();
}

Nicht getestet, könnte aber helfen.

Quelle aus Comentcamarche und Zakaria


2
window.clipboardData.clearData()funktioniert nur in dh. Wenn Sie das Ereignis abfangen, können Sie auch die Standardeinstellung verhindern und false zurückgeben. das würde das durch die Tastatur initiierte Einfügen effektiv deaktivieren. Ich würde das Beispiel posten, aber ich bin zu faul und außerdem bist du schon so nah dran.
Greggreg

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

Beim Ausschneiden, Kopieren und Einfügen von Live-Ereignissen in Textfeldern wird ein Ereignis verhindert und es funktioniert gut.


'live' ist in der neueren jQuery-Bibliothek veraltet. Sie können stattdessen 'on' verwenden.
Misam

$(document).ready(function(){...})könnte auf gleichwertig umgeschrieben werden $(function(){...}).
dma_k

Der sofort aufgerufene Funktionsausdruck (IIFE) kann ebenfalls verwendet werden. (Function () {} ());
Vikas Bansal

0

Ich habe das Problem im Chrome-Browser getestet und es funktioniert für mich. Unten finden Sie eine Lösung, um das Einfügen von Code in Ihr Textfeld und das Klicken mit der rechten Maustaste zu verhindern.

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

    e.preventDefault();
});

-1

$(document).ready(function(){
   $('input').on("cut copy paste",function(e) {
      e.preventDefault();
   });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" />


Antwort wird kopiert
Manoj Kadolkar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.