Wie erkennt man ctrl+v, ctrl+c mit 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 kann man das erreichen?
Ich habe das nur aus Interesse getan. Ich bin damit einverstanden, dass es nicht das Richtige ist, aber ich denke, es sollte die Entscheidung der Operation sein ... Auch der Code könnte leicht erweitert werden, um Funktionen hinzuzufügen, anstatt ihn zu entfernen (wie eine erweiterte Zwischenablage oder Ctrl+s Auslösen einer serverseitigen Speicherung).
$(document).ready(function() {
var ctrlDown = false,
ctrlKey = 17,
cmdKey = 91,
vKey = 86,
cKey = 67;
$(document).keydown(function(e) {
if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = true;
}).keyup(function(e) {
if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = false;
});
$(".no-copy-paste").keydown(function(e) {
if (ctrlDown && (e.keyCode == vKey || e.keyCode == cKey)) return false;
});
// Document Ctrl + C/V
$(document).keydown(function(e) {
if (ctrlDown && (e.keyCode == cKey)) console.log("Document catch Ctrl+C");
if (ctrlDown && (e.keyCode == vKey)) console.log("Document catch Ctrl+V");
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>Ctrl+c Ctrl+v disabled</h3>
<textarea class="no-copy-paste"></textarea>
<br><br>
<h3>Ctrl+c Ctrl+v allowed</h3>
<textarea></textarea>
Ebenfalls nur zur Verdeutlichung benötigt dieses Skript die jQuery-Bibliothek.
BEARBEITEN: Entfernt 3 redundante Zeilen (die e.which betreffen) dank Tim Downs Vorschlag (siehe Kommentare)
BEARBEITEN: Unterstützung für Macs hinzugefügt (Cmd-Taste anstelle von Strg)
Mit jquery können Sie leicht das Kopieren, Einfügen usw. erkennen, indem Sie die Funktion binden:
$("#textA").bind('copy', function() {
$('span').text('copy behaviour detected!')
});
$("#textA").bind('paste', function() {
$('span').text('paste behaviour detected!')
});
$("#textA").bind('cut', function() {
$('span').text('cut behaviour detected!')
});
Weitere Informationen finden Sie hier: http://www.mkyong.com/jquery/how-to-detect-copy-paste-and-cut-behavior-with-jquery/
Es kann zwar ärgerlich sein, wenn es als Maßnahme zur Pirateriebekämpfung eingesetzt wird, aber ich kann sehen, dass es einige Fälle gibt, in denen es legitim wäre.
function disableCopyPaste(Elm) {
// Disable cut/copy/paste key events
Elm.onkeydown = interceptKeys
// Disable right click events
Elm.oncontextmenu = function() {
return false
}
}
function interceptKeys(evt) {
evt = evt||window.event // IE support
var c = evt.keyCode
var ctrlDown = evt.ctrlKey||evt.metaKey // Mac support
// Check for Alt+Gr (http://en.wikipedia.org/wiki/AltGr_key)
if (ctrlDown && evt.altKey) return true
// Check for ctrl+c, v and x
else if (ctrlDown && c==67) return false // c
else if (ctrlDown && c==86) return false // v
else if (ctrlDown && c==88) return false // x
// Otherwise allow
return true
}
Ich habe event.ctrlKey
statt wie bei den meisten Browsern unter Mac OS X nach dem Schlüsselcode zu suchen Ctrl/Alt "down" - und "up" -Ereignisse werden niemals ausgelöst. Die einzige Möglichkeit zum Erkennen besteht in der Verwendung von event.ctrlKey
in der z.B. c event nach dem Ctrl Taste gedrückt halten. Ich habe auch ctrlKey
durch metaKey
für Macs ersetzt.
Einschränkungen dieser Methode:
edit
-> copy
in z. Firefox kann das Kopieren/Einfügen weiterhin zulassen. Es gibt eine andere Möglichkeit, dies zu tun: onpaste
, oncopy
und oncut
Ereignisse können registriert und Abgebrochen in IE, Firefox, Chrome, Safari (mit einigen kleinen Problemen). Der einzige große Browser, der das Abbrechen dieser Ereignisse nicht zulässt, ist Opera.
Wie Sie in meiner anderen Antwort sehen können, fängt das ab Ctrl+v und Ctrl+c kommt mit vielen Nebenwirkungen, und es hindert Benutzer immer noch nicht daran, das Firefox-Menü Edit
usw. einzufügen.
function disable_cutcopypaste(e) {
var fn = function(evt) {
// IE-specific lines
evt = evt||window.event
evt.returnValue = false
// Other browser support
if (evt.preventDefault)
evt.preventDefault()
return false
}
e.onbeforepaste = e.onbeforecopy = e.onbeforecut = fn
e.onpaste = e.oncopy = e.oncut = fn
}
Safari hat immer noch einige kleinere Probleme mit dieser Methode (sie löscht die Zwischenablage anstelle von Ausschneiden/Kopieren, wenn sie die Standardeinstellung verhindert), aber dieser Fehler scheint in Chrome jetzt behoben worden zu sein.
Siehe auch: http://www.quirksmode.org/dom/events/cutcopypaste.html und die zugehörige Testseite http://www.quirksmode.org/dom/events/tests/cutcopypaste.html für weitere Informationen.
Live Demo: http://jsfiddle.net/abdennour/ba54W/
$(document).ready(function() {
$("#textA").bind({
copy : function(){
$('span').text('copy behaviour detected!');
},
paste : function(){
$('span').text('paste behaviour detected!');
},
cut : function(){
$('span').text('cut behaviour detected!');
}
});
});
Kurze Lösung, um zu verhindern, dass Benutzer das Kontextmenü verwenden, kopieren und in jQuery ausschneiden:
jQuery(document).bind("cut copy contextmenu",function(e){
e.preventDefault();
});
Auch das Deaktivieren der Textauswahl in CSS kann nützlich sein:
.noselect {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
verwenden Sie statt onkeypress onkeydown.
<input type="text" onkeydown="if(event.ctrlKey && event.keyCode==86){return false;}" name="txt">
Ich habe ein jQuery-Plugin geschrieben, das Tastatureingaben abfängt. Es kann verwendet werden, um mehrsprachige Skripteingaben 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.
Sie können diesen Code für Rechtsklick verwenden, CTRL+C, CTRL+V, CTRL+X erkennen und verhindern ihre Aktion
$(document).bind('copy', function(e) {
alert('Copy is not allowed !!!');
e.preventDefault();
});
$(document).bind('paste', function() {
alert('Paste is not allowed !!!');
e.preventDefault();
});
$(document).bind('cut', function() {
alert('Cut is not allowed !!!');
e.preventDefault();
});
$(document).bind('contextmenu', function(e) {
alert('Right Click is not allowed !!!');
e.preventDefault();
});
Ein anderer Ansatz (kein Plugin erforderlich) ist die Verwendung der ctrlKey
-Eigenschaft des Ereignisobjekt , das übergeben wird. Er gibt an, ob Ctrl wurde zum Zeitpunkt der Veranstaltung wie folgt gedrückt:
$(document).keypress("c",function(e) {
if(e.ctrlKey)
alert("Ctrl+C was pressed!!");
});
Siehe auch Abfrage: Tastendruck, Strg + C (oder eine solche Kombination) .
Wenn Sie die Eigenschaft ctrlKey
verwenden, müssen Sie den Status nicht pflegen.
$(document).keydown(function(event) {
// Ctrl+C or Cmd+C pressed?
if ((event.ctrlKey || event.metaKey) && event.keyCode == 67) {
// Do stuff.
}
// Ctrl+V or Cmd+V pressed?
if ((event.ctrlKey || event.metaKey) && event.keyCode == 86) {
// Do stuff.
}
// Ctrl+X or Cmd+X pressed?
if ((event.ctrlKey || event.metaKey) && event.keyCode == 88) {
// Do stuff.
}
}
ich habe bereits Ihr Problem und ich habe es durch den folgenden Code gelöst .. die nur Zahlen akzeptieren
$('#<%= mobileTextBox.ClientID %>').keydown(function(e) {
///// e.which Values
// 8 : BackSpace , 46 : Delete , 37 : Left , 39 : Rigth , 144: Num Lock
if (e.which != 8 && e.which != 46 && e.which != 37 && e.which != 39 && e.which != 144
&& (e.which < 96 || e.which > 105 )) {
return false;
}
});
sie können erkennen Ctrl Ich würde e.which == 17
Vergessen Sie das nicht, während Sie möglicherweise erkennen und blockieren können Ctrl+C/Vkönnen Sie den Wert eines bestimmten Feldes noch ändern.
Das beste Beispiel hierfür ist die Funktion "Elemente überprüfen" in Chrome, mit der Sie die Werteigenschaft eines Felds ändern können.
Ich habe eine Zeit lang e.keyCode
Verwendet und dies beim Drücken von festgestellt ctrl + ., Dieses Attribut gibt eine falsche Zahl (190) zurück, während der ASCII-Code von .
46 ist!
Sie sollten also e.key.toUpperCase().charCodeAt(0)
anstelle von e.keyCode
Verwenden.
Sie können das Tastendruckereignis abhören und das Standardereignis anhalten (indem Sie den Text eingeben), wenn es mit den spezifischen Tastencodes übereinstimmt