Existe uma maneira de usar o JavaScript para desativar a capacidade de colar texto em um campo de texto em um formulário HTML?
Por exemplo, eu tenho um formulário de registro simples onde o usuário é obrigado a inserir seu e-mail duas vezes. A segunda entrada de e-mail é para verificar se não há erros de digitação na primeira entrada de e-mail. No entanto, se o usuário copiar / colar seu e-mail, isso vai contra o propósito e estou tendo problemas com os usuários porque inseriram o e-mail errado e o copiaram / colaram.
Talvez minha pergunta não tenha sido clara, mas não estou tentando impedir que as pessoas copiem (ou arrastem e selecionem) texto em seus navegadores. Só quero impedi-los de colar a entrada em um campo de texto para minimizar o erro do usuário.
Talvez em vez de usar este "hack" você possa sugerir outra solução para o problema central que estou tentando resolver aqui. Eu fiz menos de meia dúzia de testes de usuário e isso já aconteceu duas vezes. Meu público não tem um alto nível de proficiência em computador.
fonte
Respostas:
Recentemente, tive que desabilitar relutantemente a colagem em um elemento de formulário. Para fazer isso, escrevi uma implementação cross-browser * do manipulador de eventos onpaste do Internet Explorer (e de outros). Minha solução precisava ser independente de quaisquer bibliotecas JavaScript de terceiros.
Aqui está o que eu inventei. Não desativa completamente a colagem (o usuário pode colar um único caractere por vez, por exemplo), mas atende às minhas necessidades e evita ter que lidar com códigos-chave, etc.
Para fazer uso disso a fim de desativar a colagem:
* Sei que oninput não faz parte das especificações W3C DOM, mas todos os navegadores com os quais testei esse código - Chrome 2, Safari 4, Firefox 3, Opera 10, IE6, IE7 - são compatíveis com oninput ou onpaste. De todos esses navegadores, apenas o Opera não oferece suporte a onpaste, mas oferece suporte a oninput.
Nota: Isso não funcionará em um console ou outro sistema que use um teclado na tela (assumindo que o teclado na tela não envia teclas para o navegador quando cada tecla é selecionada). Se for possível que sua página / aplicativo seja usado por alguém com um teclado na tela e Opera (por exemplo: Nintendo Wii, alguns telefones celulares), não use este script a menos que você tenha testado para certificar-se do teclado na tela envia chaves para o navegador após cada seleção de chave.
fonte
onpaste="return false"
, há algum problema se eu seguir essa abordagemonpaste
em navegadores que ainda não o fornecem. Você diz " Eu posso evitar que o usuário cole qualquer coisa ", mas em quais navegadores você testou?Não faça isso. Não mexa no navegador do usuário. Ao copiar + colar em um campo de confirmação de e-mail, o usuário assume a responsabilidade sobre o que digitar. Se eles são burros o suficiente para copiar e colar um endereço defeituoso (aconteceu comigo), então a culpa é deles.
Se quiser ter certeza de que a confirmação do e-mail funcionou, peça ao usuário que verifique o e-mail enquanto o site aguarda ("Abra o programa de webmail em uma nova janela"). Mostre o endereço de e-mail em letras grandes ("O e-mail de confirmação foi enviado para .... cometeu um erro? Clique aqui para alterar).
Melhor ainda, se você puder, deixe o usuário ter algum tipo de acesso limitado sem confirmar. Dessa forma, eles podem fazer o login imediatamente e você aumenta suas chances de manter contato com o visitante, mesmo se o e-mail de confirmação for bloqueado por outros motivos (por exemplo, filtros de spam).
fonte
Adicione uma classe de 'disablecopypaste' às entradas em que deseja desativar a funcionalidade de copiar e colar e adicione este script jQuery
fonte
Acabamos de conseguir isso, podemos consegui-lo usando
onpaste:"return false"
, graças a: http://sumtips.com/2011/11/prevent-copy-cut-paste-text-field.htmlTemos várias outras opções disponíveis conforme listado abaixo.
fonte
Você pode ... mas não faça.
Você não deve alterar o comportamento padrão do navegador de um usuário. É realmente ruim a usabilidade do seu aplicativo da web. Além disso, se um usuário deseja desabilitar este hack, ele pode simplesmente desabilitar o javascript em seu navegador.
Basta adicionar esses atributos à caixa de texto
fonte
Idéia maluca: exigir que o usuário envie um e-mail como parte do processo de inscrição. Isso obviamente seria inconveniente quando clicar em um link mailto não funciona (se eles estiverem usando webmail, por exemplo), mas eu vejo isso como uma forma de garantir simultaneamente contra erros de digitação e confirmar o endereço de e-mail.
Seria assim: Eles preenchem a maior parte do formulário, inserindo seu nome, senha e outros enfeites. Quando eles enviam, na verdade estão clicando em um link para enviar e-mail para o seu servidor. Você já salvou as outras informações deles, então a mensagem inclui apenas um token informando a qual conta se destina.
fonte
Que tal enviar um email de confirmação para o endereço de email que o usuário acabou de inserir duas vezes no qual há um link para uma URL de confirmação em seu site, então você sabe que ele recebeu a mensagem?
Qualquer pessoa que não clicar para confirmar o recebimento do e-mail pode ter inserido o endereço de e-mail incorretamente.
Não é uma solução perfeita, mas apenas algumas ideias.
fonte
Você pode usar o jquery
Arquivo HTML
código jquery
fonte
Estendendo a resposta @boycs , eu recomendaria também usar "on".
fonte
Se você tiver que usar 2 campos de e-mail e estiver preocupado com o fato de o usuário colar incorretamente o mesmo e-mail digitado incorretamente do campo 1 para o campo 2, então eu diria para mostrar um alerta (ou algo mais sutil) se o usuário colar algo no segundo campo de e-mail
dessa forma, você não desativa a colagem, apenas dá a eles um lembrete amigável para verificar se o que eles provavelmente digitaram no primeiro campo e depois colaram no segundo campo está correto.
entretanto, talvez um único campo de e-mail com preenchimento automático ativado seja tudo o que você precisa. é provável que eles tenham preenchido o e-mail corretamente antes em outro site em algum momento e o navegador sugerirá preencher o campo com esse e-mail
fonte
Você pode anexar um ouvinte "keydown" à caixa de entrada para detectar se as teclas Ctrl + V estão ou não sendo pressionadas e, em caso afirmativo, interromper o evento ou definir o valor da caixa de entrada para ''.
Isso não funcionaria clicando com o botão direito e colando ou colando do menu Editar do navegador, no entanto. Você pode precisar adicionar um contador de "último comprimento" ao ouvinte keydown e usar um intervalo para verificar o comprimento atual do campo para ver se ele aumentou desde o último pressionamento de tecla.
Nenhum dos dois é recomendado, no entanto. Campos de formulário com colagem desativada são extremamente frustrantes. Sou capaz de digitar meu e-mail corretamente na primeira vez, então me reservo o direito de colá-lo na segunda caixa.
fonte
Adicione uma segunda etapa ao seu processo de registro. Primeira página como de costume, mas ao recarregar, exiba uma segunda página e peça o e-mail novamente. Se for tão importante, o usuário pode cuidar disso.
fonte
de
Alguns podem sugerir o uso de Javascript para capturar as ações dos usuários, como clicar com o botão direito do mouse ou as combinações de teclas Ctrl + C / Ctrl + V e, em seguida, interromper a operação. Mas essa obviamente não é a melhor ou a mais simples solução. A solução está integrada nas próprias propriedades do campo de entrada junto com alguma captura de evento usando Javascript.
Para desativar o preenchimento automático dos navegadores, basta adicionar o atributo ao campo de entrada. Deve ser parecido com isto:
E se você quiser negar Copiar e Colar para esse campo, basta adicionar o evento Javascript capturando chamadas oncopy, onpaste e oncut e fazer com que elas retornem false, assim:
A próxima etapa é usar onselectstart para negar a seleção de conteúdo do campo de entrada do usuário, mas esteja avisado: isso só funciona para o Internet Explorer. O restante do acima funciona muito bem em todos os principais navegadores: Internet Explorer, Mozilla Firefox, Apple Safari (no sistema operacional Windows, pelo menos) e Google Chrome.
fonte
Verifique a validade do registro MX do host do e-mail fornecido. Isso pode eliminar erros à direita do sinal @.
Você pode fazer isso com uma chamada AJAX antes de enviar e / ou do lado do servidor após o formulário ser enviado.
fonte
Usando jquery, você pode evitar copiar, colar e recortar usando este
fonte
Eu uso esta solução JS vanilla:
fonte
Com Jquery você pode fazer isso com uma linha de código simples.
HTML:
Código:
JSfiddle: https://jsfiddle.net/ZjR9P/2/
fonte
que tal usar CSS no UIWebView? algo como
você também pode ler detalhes sobre copiar e colar em bloco usando CSS http://rakaz.nl/2009/09/iphone-webapps-101-getting-safari-out-of-the-way.html
fonte
Solução simples: basta reverter o processo de registro: em vez de exigir a confirmação no final do processo de registro, solicite a confirmação no início! Ou seja, o processo de registro começou com um formulário simples solicitando o endereço de e-mail e nada mais. Ao enviar, um e-mail com link para uma página de confirmação exclusiva para o endereço de e-mail enviado. O usuário acessa essa página, então o restante das informações para o cadastro (nome do usuário, nome completo, etc.) será solicitado.
Isso é simples, já que o site nem mesmo precisa armazenar nada antes da confirmação, o endereço de e-mail pode ser criptografado com uma chave e anexado como parte do endereço da página de confirmação.
fonte
Fiz algo semelhante a isso para http://bookmarkchamp.com - lá, eu queria detectar quando um usuário copiava algo em um campo HTML. A implementação que eu criei era verificar o campo constantemente para ver se, de repente, havia muito texto nele.
Em outras palavras: se antes milissegundo atrás não havia texto e agora há mais de 5 caracteres ... então o usuário provavelmente colou algo no campo.
Se você quiser ver isso funcionando no Bookmarkchamp (você precisa estar registrado), cole um URL no campo URL (ou arraste e solte um URL lá).
fonte
A maneira como eu resolveria o problema de confirmação de um endereço de e-mail é a seguinte:
Para maior segurança, o código deve ter vida útil limitada e deve ser permitido apenas uma vez no processo de registro. Além disso, para evitar qualquer aplicativo malicioso do robô, é melhor acompanhar a primeira etapa com captcha ou um mecanismo semelhante.
fonte
Você pode desabilitar a opção copiar e colar do jQuery pelo script abaixo. jQuery ("input"). attr ("onpaste", "return false;");
de usar o atributo oppaste abaixo nos campos de entrada.
onpaste = "return false;"
fonte
fonte