Wie erkennt man ctrl+ v, ctrl+ cmit Javascript?
Ich muss das Einfügen in meine Textbereiche einschränken. Der Endbenutzer sollte den Inhalt nicht kopieren und einfügen. Der Benutzer sollte nur Text in den Textbereich eingeben.
Wie erreicht man das?
javascript
jquery
html
Ramakrishnan
quelle
quelle
Antworten:
Ich habe das nur aus Interesse gemacht. Ich bin damit einverstanden, dass es nicht das Richtige ist, aber ich denke, es sollte die Entscheidung des OP sein ... Auch der Code könnte leicht erweitert werden, um Funktionen hinzuzufügen, anstatt ihn wegzunehmen (wie eine erweiterte Zwischenablage oder Ctrl+ das sAuslösen eines Servers) -Seite speichern).
Zur Verdeutlichung benötigt dieses Skript auch die jQuery-Bibliothek.
Codepen-Demo
BEARBEITEN: 3 redundante Zeilen (mit e.which) wurden entfernt, dank Tim Downs Vorschlag (siehe Kommentare)
BEARBEITEN: Unterstützung für Macs hinzugefügt ( cmdSchlüssel statt ctrl)
quelle
keydown
undkeyup
Handler aufdocument
? Sie können im$(".no-copy-paste").keydown
Handler nach der Strg-Taste suchen. Außerdem ist dase.keyCode || e.which
Bit nicht erforderlich : Funktionierte.keyCode
in allen Browsern,e.which
in denen es funktioniert, unde.which
wird daher niemals verwendet. Vielleicht haben Sie darüber nachgedacht, wie Sie einen Zeichencode aus einemkeypress
Ereignis erhalten? Schließlich wird dies nichts gegen Pasten aus dem Kontext oder das Bearbeiten von Menüs tun, aber ich nehme an, das OP hat nicht direkt danach gefragt.e.metaKey
oder zu seine.ctrlKey
,true
anstatt den Schlüsseln Zahlenwerte zuzuweisen und diese zu testen.Mit jquery können Sie das Kopieren, Einfügen usw. leicht erkennen, indem Sie die Funktion binden:
Weitere Informationen hier: http://www.mkyong.com/jquery/how-to-detect-copy-paste-and-cut-behavior-with-jquery/
quelle
Es kann zwar ärgerlich sein, wenn es als Maßnahme gegen Piraterie eingesetzt wird, aber ich kann sehen, dass es einige Fälle gibt, in denen es legitim wäre, also:
Ich habe verwendet,
event.ctrlKey
anstatt nach dem Schlüsselcode zu suchen, da in den meisten Browsern unter Mac OS X Ctrl/ Alt"down" - und "up" -Ereignisse niemals ausgelöst werden. Die einzige Möglichkeit, dies zu erkennen, besteht darin,event.ctrlKey
das Ereignis "eg c" nach dem CtrlSchlüssel zu verwenden niedergehalten. Ich habe auch substituiertctrlKey
mitmetaKey
für macs.Einschränkungen dieser Methode:
edit
->copy
in z. B. Firefox kann weiterhin das Kopieren / Einfügen ermöglichen.quelle
Es gibt einen anderen Weg , dies zu tun:
onpaste
,oncopy
undoncut
Ereignisse registriert und in IE, Firefox, Chrome, Safari (mit einigen kleineren Problemen), der einzige große Browser gelöscht werden , die nicht erlaubt , diese Ereignisse Cancelling Opera ist.Wie Sie in meiner anderen Antwort sehen können, hat das Abfangen von Ctrl+ vund Ctrl+ cviele Nebenwirkungen, und es hindert Benutzer immer noch nicht daran, das Firefox-
Edit
Menü usw. einzufügen.Safari hat immer noch einige kleinere Probleme mit dieser Methode (es löscht die Zwischenablage anstelle von Ausschneiden / Kopieren, wenn die Standardeinstellung verhindert wird), aber dieser Fehler scheint jetzt in Chrome behoben worden zu sein.
Weitere Informationen finden Sie auch unter: http://www.quirksmode.org/dom/events/cutcopypaste.html und auf der zugehörigen Testseite http://www.quirksmode.org/dom/events/tests/cutcopypaste.html .
quelle
Live-Demo: http://jsfiddle.net/abdennour/ba54W/
quelle
Kurze Lösung, um zu verhindern, dass Benutzer das Kontextmenü verwenden, in jQuery kopieren und ausschneiden:
Auch das Deaktivieren der Textauswahl in CSS kann nützlich sein:
quelle
Wenn Sie die
ctrlKey
Eigenschaft verwenden, müssen Sie den Status nicht beibehalten.quelle
Ich habe ein jQuery-Plugin geschrieben, das Tastenanschläge abfängt. Es kann verwendet werden, um die Eingabe mehrerer Skriptskripte in HTML-Formularen ohne das Betriebssystem (mit Ausnahme der Schriftarten) zu aktivieren. Es sind ungefähr 300 Codezeilen, vielleicht möchten Sie einen Blick darauf werfen:
Seien Sie im Allgemeinen vorsichtig mit solchen Änderungen. Ich habe das Plugin für einen Client geschrieben, weil andere Lösungen nicht verfügbar waren.
quelle
Sie können diesen Code verwenden, um mit der rechten Maustaste zu klicken, CTRL+ C, CTRL+ V, CTRL+ Xihre Aktion zu erkennen und zu verhindern
quelle
Verwenden Sie anstelle von onkeypress onkeydown.
quelle
Ein anderer Ansatz (kein Plugin erforderlich) besteht darin, nur die
ctrlKey
Eigenschaft des Ereignisobjekts zu verwenden , das übergeben wird. Es zeigt an, ob Ctrlzum Zeitpunkt des Ereignisses gedrückt wurde, wie folgt:Siehe auch jquery: Tastendruck, Strg + C (oder eine solche Kombination) .
quelle
Vergessen Sie nicht, dass Sie zwar Ctrl+ C/ erkennen und blockieren Vkönnen, aber dennoch den Wert eines bestimmten Felds ändern können.
Das beste Beispiel hierfür ist die Inspect Element-Funktion von Chrome, mit der Sie die value-Eigenschaft eines Felds ändern können.
quelle
Ich habe bereits Ihr Problem und ich habe es durch den folgenden Code gelöst .. die nur Zahlen akzeptieren
Sie können CtrlID erkennen
e.which == 17
quelle
Sie können das Tastendruckereignis abhören und das Standardereignis (Eingabe des Textes) anhalten, wenn es mit den spezifischen Tastencodes übereinstimmt
quelle
Wichtige Notiz
Ich habe es
e.keyCode
eine Weile benutzt und festgestellt, dass dieses Attribut beim Drücken von ctrl+ .eine falsche Zahl 190 zurückgibt, während der ASCII-Code.
46 lautet!Also solltest du
e.key.toUpperCase().charCodeAt(0)
statt verwendene.keyCode
.quelle
Es gibt einige Möglichkeiten, dies zu verhindern.
Der Benutzer kann jedoch immer das Javascript deaktivieren oder nur den Quellcode der Seite anzeigen.
Einige Beispiele (erfordern jQuery)
Bearbeiten: Wie Tim Down sagte, sind diese Funktionen alle Browser-abhängig.
quelle
paste
Ereignis, das alle Versionen von Firefox vor Version 3 enthält. Zweitenswindow.clipboardData
ist es nur IE und ich glaube, es ist jetzt standardmäßig im IE deaktiviert . Drittens ist das Deaktivieren allerkeydown
Ereignisse, bei denen die Strg-Taste gedrückt wird, übermäßig: Sie verhindern nützliche Tastenkombinationen wie Strg-A (alle auswählen) und Strg-Z (rückgängig machen). Viertens, wie von anderen erwähnt, ist dies eine wirklich schlechte Sache.