Como detectar ctrl+ v, ctrl+ cusando Javascript?
Preciso restringir a colar nas minhas áreas de texto, o usuário final não deve copiar e colar o conteúdo, o usuário deve digitar apenas o texto na área de texto.
Como conseguir isso?
javascript
jquery
html
Ramakrishnan
fonte
fonte
Respostas:
Eu apenas fiz isso por interesse. Concordo que não é a coisa certa a ser feita, mas acho que deve ser a decisão do op ... Também o código pode ser facilmente estendido para adicionar funcionalidade, em vez de removê-la (como uma área de transferência mais avançada ou Ctrl+ sacionar um servidor lado salvar).
Também apenas para esclarecer, esse script requer a biblioteca jQuery.
Codepen demo
EDIT: removeu 3 linhas redundantes (envolvendo e.which) graças à sugestão de Tim Down (ver comentários)
EDIT: adicionado suporte para Macs ( cmdchave em vez de ctrl)
fonte
keydown
e ? Você pode testar a tecla Ctrl no manipulador. Além disso, não há necessidade do bit: funciona em todos os navegadores que funcionam, portanto nunca será usado. Talvez você estivesse pensando em como obter um código de caractere de um evento? Por fim, isso não fará nada com pastas do contexto ou menus de edição, mas suponho que o OP não tenha perguntado diretamente sobre isso.keyup
document
$(".no-copy-paste").keydown
e.keyCode || e.which
e.keyCode
e.which
e.which
keypress
e.metaKey
oue.ctrlKey
ser, emtrue
vez de atribuir valores numéricos às chaves e testá-las.Com o jquery você pode facilmente detectar copiar, colar, etc, vinculando a função:
Mais informações aqui: http://www.mkyong.com/jquery/how-to-detect-copy-paste-and-cut-behavior-with-jquery/
fonte
Embora possa ser irritante quando usado como uma medida antipirataria, posso ver que pode haver alguns casos em que seria legítimo, então:
Eu usei, em
event.ctrlKey
vez de verificar o código da chave, como na maioria dos navegadores nos eventos Mac OS X Ctrl/ Alt"down" e "up" nunca são acionados, portanto, a única maneira de detectar é usarevent.ctrlKey
o evento eg c após a Ctrltecla ser pressionada. pressionado. Eu também substituídoctrlKey
commetaKey
para Macs.Limitações deste método:
edit
->copy
no Firefox, por exemplo, ainda pode permitir copiar / colar.fonte
Há uma outra maneira de fazer isso:
onpaste
,oncopy
eoncut
os eventos podem ser registrados e cancelado no IE, Firefox, Chrome, Safari (com alguns pequenos problemas), o único grande navegador que não permite cancelar esses eventos é Opera.Como você pode ver na minha outra resposta, a interceptação de Ctrl+ ve Ctrl+ cvem com muitos efeitos colaterais, e ainda não impede que os usuários colem usando o
Edit
menu do Firefox etc.O Safari ainda tem alguns pequenos problemas com esse método (ele limpa a área de transferência no lugar de recortar / copiar ao impedir o padrão), mas esse bug parece ter sido corrigido no Chrome agora.
Consulte também: http://www.quirksmode.org/dom/events/cutcopypaste.html e a página de teste associada http://www.quirksmode.org/dom/events/tests/cutcopypaste.html para obter mais informações.
fonte
Demonstração ao vivo: http://jsfiddle.net/abdennour/ba54W/
fonte
Solução curta para impedir que o usuário use o menu de contexto, copie e recorte no jQuery:
Desabilitar também a seleção de texto em CSS pode ser útil:
fonte
Se você usar a
ctrlKey
propriedade, não precisará manter o estado.fonte
Eu escrevi um plugin jQuery, que captura as teclas digitadas. Ele pode ser usado para ativar a entrada de scripts de vários idiomas em formulários html sem o sistema operacional (exceto as fontes). São cerca de 300 linhas de código, talvez você queira dar uma olhada:
Geralmente, tenha cuidado com esse tipo de alteração. Eu escrevi o plugin para um cliente porque outras soluções não estavam disponíveis.
fonte
Você pode usar esse código para clicar com o botão direito, CTRL+ C, CTRL+ V, CTRL+ Xdetectar e impedir sua ação
fonte
em vez de onkeypress, use onkeydown.
fonte
Outra abordagem (nenhum plug-in necessário) é usar apenas a
ctrlKey
propriedade do objeto de evento que é passado. Indica se Ctrlfoi pressionado no momento do evento, assim:Veja também jquery: pressionamento de tecla, ctrl + c (ou algum combo assim) .
fonte
Não se esqueça de que, embora seja possível detectar e bloquear Ctrl+ C/ V, você ainda pode alterar o valor de um determinado campo.
O melhor exemplo disso é a função Inspect Element do Chrome, que permite alterar a propriedade de valor de um campo.
fonte
eu já tenho seu problema e resolvi-o pelo código a seguir .. que aceita apenas números
você pode detectar Ctrlid
e.which == 17
fonte
Você pode ouvir o evento de pressionamento de tecla e interromper o evento padrão (digitando o texto) se ele corresponder aos códigos de tecla específicos
fonte
Nota importante
Eu estava usando
e.keyCode
por um tempo e descobri que quando pressiono ctrl+ ., este atributo retorna um número errado, 190, enquanto o código ascii.
é 46!Então você deve usar em
e.key.toUpperCase().charCodeAt(0)
vez dee.keyCode
.fonte
Existem algumas maneiras de evitá-lo.
No entanto, o usuário sempre poderá desativar o javascript ou apenas olhar o código-fonte da página.
Alguns exemplos (requerem jQuery)
Edit: Como Tim Down disse, essas funções são todos dependentes do navegador.
fonte
paste
evento, que inclui todas as versões do Firefox anteriores à versão 3. Segundo,window.clipboardData
é apenas o IE e acredito que agora esteja desativado por padrão no IE . Terceiro, desabilitar todos oskeydown
eventos em que a tecla Ctrl é pressionada é excessivo: você evita atalhos úteis do teclado, como Ctrl-A (selecionar todos) e Ctrl-Z (desfazer). Quarto, como mencionado por outros, isso é uma coisa muito ruim de se fazer.