¿Cómo detectar ctrl+ v, ctrl+ cusando Javascript?
Necesito restringir el pegado en mis áreas de texto, el usuario final no debe copiar y pegar el contenido, el usuario solo debe escribir texto en el área de texto.
¿Cómo lograr esto?
javascript
jquery
html
Ramakrishnan
fuente
fuente
Respuestas:
Acabo de hacer esto por interés. Estoy de acuerdo en que no es lo correcto, pero creo que debería ser la decisión del operador ... Además, el código podría extenderse fácilmente para agregar funcionalidad, en lugar de eliminarlo (como un portapapeles más avanzado o Ctrl+ sactivar un servidor lado guardado).
También para aclarar, este script requiere la biblioteca jQuery.
Codepen demo
EDITAR: eliminó 3 líneas redundantes (que involucran e.which) gracias a la sugerencia de Tim Down (ver comentarios)
EDITAR: soporte agregado para Mac ( cmdclave en lugar de ctrl)
fuente
keydown
y loskeyup
controladores endocument
? Puede probar la tecla Ctrl en el$(".no-copy-paste").keydown
controlador. Además, no es necesario ele.keyCode || e.which
bit:e.keyCode
funciona en todos los navegadores quee.which
funcionan, pore.which
lo que nunca se utilizará. ¿Quizás estabas pensando en cómo obtienes un código de personaje de unkeypress
evento? Finalmente, esto no hará nada sobre las pastas del contexto o los menús de edición, pero supongo que el OP no preguntó directamente sobre eso.e.metaKey
oe.ctrlKey
ser entrue
lugar de asignar valores numéricos a las teclas y probarlos.Con jquery puede detectar fácilmente copiar, pegar, etc. al vincular la función:
Más información aquí: http://www.mkyong.com/jquery/how-to-detect-copy-paste-and-cut-behavior-with-jquery/
fuente
Si bien puede ser molesto cuando se usa como una medida contra la piratería, puedo ver que podría haber algunos casos en los que sería legítimo, así que:
He utilizado en
event.ctrlKey
lugar de verificar el código de la clave, ya que en la mayoría de los navegadores en Mac OS X Ctrl/ Alteventos "down" y "up" nunca se activan, por lo que la única forma de detectar es usarevent.ctrlKey
en el evento, por ejemplo, c después de que la Ctrlclave es presionado. También he sustituidoctrlKey
conmetaKey
para Macs.Limitaciones de este método:
edit
->copy
en, por ejemplo, Firefox todavía puede permitir copiar / pegar.fuente
Hay otra forma de hacer esto:
onpaste
,oncopy
yoncut
los eventos pueden ser registrados y cancelado de IE, Firefox, Chrome, Safari (con algunos problemas menores), la única gran navegador que no permite la cancelación de estos eventos es Opera.Como puede ver en mi otra respuesta, interceptar Ctrl+ vy Ctrl+ cviene con muchos efectos secundarios, y aún así no impide que los usuarios peguen usando el
Edit
menú de Firefox , etc.Safari todavía tiene algunos problemas menores con este método (borra el portapapeles en lugar de cortar / copiar cuando se evita el valor predeterminado), pero ese error parece haberse solucionado en Chrome ahora.
Consulte también: http://www.quirksmode.org/dom/events/cutcopypaste.html y la página de prueba asociada http://www.quirksmode.org/dom/events/tests/cutcopypaste.html para obtener más información.
fuente
Demostración en vivo: http://jsfiddle.net/abdennour/ba54W/
fuente
Solución corta para evitar que el usuario use el menú contextual, copie y corte en jQuery:
También puede ser útil desactivar la selección de texto en CSS:
fuente
Si usa la
ctrlKey
propiedad, no necesita mantener el estado.fuente
Escribí un complemento jQuery, que captura las pulsaciones de teclas. Se puede usar para habilitar la entrada de secuencia de comandos de varios idiomas en formularios html sin el sistema operativo (excepto las fuentes). Son alrededor de 300 líneas de código, tal vez te guste echar un vistazo:
En general, tenga cuidado con este tipo de alteraciones. Escribí el complemento para un cliente porque otras soluciones no estaban disponibles.
fuente
Puede usar este código para hacer clic derecho, CTRL+ C, CTRL+ V, CTRL+ Xdetectar y prevenir su acción
fuente
en lugar de onkeypress, usa onkeydown.
fuente
Otro enfoque (no se necesita ningún complemento) es usar la
ctrlKey
propiedad del objeto de evento que se pasa. Indica si Ctrlse presionó en el momento del evento, de esta manera:Ver también jquery: keypress, ctrl + c (o algún combo como ese) .
fuente
No olvide que, si bien puede detectar y bloquear Ctrl+ C/ V, aún puede alterar el valor de un determinado campo.
El mejor ejemplo para esto es la función Inspeccionar elemento de Chrome, que le permite cambiar la propiedad de valor de un campo.
fuente
ya tengo tu problema y lo resolví con el siguiente código ... que solo acepta números
puedes detectar Ctrlid
e.which == 17
fuente
Puede escuchar el evento de pulsación de tecla y detener el evento predeterminado (ingresar el texto) si coincide con los códigos de tecla específicos
fuente
Nota IMPORTANTE
Estuve usando
e.keyCode
durante un tiempo y detecté que cuando presiono ctrl+ ., ¡Este atributo devuelve un número incorrecto, 190, mientras que el código ascii de.
es 46!Entonces deberías usar en
e.key.toUpperCase().charCodeAt(0)
lugar dee.keyCode
.fuente
Hay algunas formas de prevenirlo.
Sin embargo, el usuario siempre podrá desactivar el javascript o simplemente mirar el código fuente de la página.
Algunos ejemplos (requieren jQuery)
Editar: como dijo Tim Down, todas estas funciones dependen del navegador.
fuente
paste
evento, que incluye todas las versiones de Firefox anteriores a la versión 3. Segundo,window.clipboardData
es solo IE y creo que ahora está deshabilitado por defecto en IE . En tercer lugar, deshabilitar todos loskeydown
eventos en los que se presiona la tecla Ctrl es excesivo: evita atajos de teclado útiles como Ctrl-A (seleccionar todo) y Ctrl-Z (deshacer). Cuarto, como lo mencionaron otros, esto es algo realmente malo.