90 votos

Desactivar Copiar/Pegar en el formulario HTML con Javascript

Hay una manera de usar Javascript para deshabilitar la capacidad de pegar texto en un campo de texto en un formulario HTML?

E. g. Tengo un simple formulario de registro donde el usuario debe ingresar su correo electrónico dos veces. El segundo correo electrónico de entrada para comprobar que no hay errores tipográficos en el primer correo electrónico de entrada. Sin embargo, si el usuario copia/pega de su correo electrónico, que derrota el propósito y he estado experimentando los usuarios a tener problemas, porque se han de entrada de correo electrónico incorrecta y copia/pega.

Gracias!

EDITAR: Tal vez no fui claro en mi pregunta, pero yo no estoy tratando de evitar que la gente de la copia (o arrastre la selección) texto en su navegador. Sólo quiero que dejen de pegar de entrada en un campo de texto para minimizar los errores de usuario.

Tal vez en lugar de a través de este "hack" usted puede pensar en otra solución al problema de la base de lo que estoy tratando de resolver aquí? He hecho menos de la mitad de una docena de pruebas de usuario y esto ya ha ocurrido dos veces. Mi público no tiene un alto nivel de conocimientos de computación.

132voto

Pekka 웃 Puntos 249607

<editorial>

Que no lo haga. No se metan con el navegador del usuario. Por Copiar + Pegar en un Correo electrónico de confirmación de campo, el usuario acepta la responsabilidad sobre lo que escriben. Si son lo suficientemente estúpido como para copiar + pegar un defecto de la dirección (me ha pasado), pues es su propia maldita culpa.

Si desea asegurarse de que el E-Mail de confirmación de las obras, que el usuario compruebe su E-Mail, mientras que su sitio de espera ("por Favor, abra su correo electrónico el programa en una ventana nueva"). Mostrar la dirección de Correo electrónico en el gran premio de las letras ("El mensaje de confirmación por Correo Electrónico fue enviado a.... cometió un error? Haga clic aquí para cambiar).

Aún mejor, si se puede, dejar que el usuario tiene algún tipo de acceso limitado sin confirmar. De esa manera, ellos pueden entrar en seguida y a mejorar sus posibilidades de mantenerse en contacto con los visitantes, incluso si el correo de confirmación está bloqueado debido a otras razones (por ejemplo, los filtros de spam).

</editorial>

65voto

Boycs Puntos 1973

Agregar una clase de 'disablecopypaste' a las entradas que desea deshabilitar la copia pegar y añadir este script jQuery

  $(document).ready(function () {
    $('input.disablecopypaste').bind('copy paste', function (e) {
       e.preventDefault();
    });
  });

51voto

Christopher Parker Puntos 1816

Recientemente he tenido que estar de desactivar pegar en un elemento de formulario. Para ello, escribí un cross-browser* aplicación de Internet Explorer (y de otros) onpaste controlador de eventos. Mi solución tenía que ser independiente de cualquier tercero bibliotecas de JavaScript.

He aquí lo que se me ocurrió. No deshabilitar completamente pegado (el usuario puede pegar un solo carácter a la vez, por ejemplo), pero que cumple con mis necesidades y evita tener que lidiar con códigos de teclas, etc.

// Register onpaste on inputs and textareas in browsers that don't
// natively support it.
(function () {
    var onload = window.onload;

    window.onload = function () {
        if (typeof onload == "function") {
            onload.apply(this, arguments);
        }

        var fields = [];
        var inputs = document.getElementsByTagName("input");
        var textareas = document.getElementsByTagName("textarea");

        for (var i = 0; i < inputs.length; i++) {
            fields.push(inputs[i]);
        }

        for (var i = 0; i < textareas.length; i++) {
            fields.push(textareas[i]);
        }

        for (var i = 0; i < fields.length; i++) {
            var field = fields[i];

            if (typeof field.onpaste != "function" && !!field.getAttribute("onpaste")) {
                field.onpaste = eval("(function () { " + field.getAttribute("onpaste") + " })");
            }

            if (typeof field.onpaste == "function") {
                var oninput = field.oninput;

                field.oninput = function () {
                    if (typeof oninput == "function") {
                        oninput.apply(this, arguments);
                    }

                    if (typeof this.previousValue == "undefined") {
                        this.previousValue = this.value;
                    }

                    var pasted = (Math.abs(this.previousValue.length - this.value.length) > 1 && this.value != "");

                    if (pasted && !this.onpaste.apply(this, arguments)) {
                        this.value = this.previousValue;
                    }

                    this.previousValue = this.value;
                };

                if (field.addEventListener) {
                    field.addEventListener("input", field.oninput, false);
                } else if (field.attachEvent) {
                    field.attachEvent("oninput", field.oninput);
                }
            }
        }
    }
})();

Para hacer uso de este para desactivar pegar:

<input type="text" onpaste="return false;" />


* Sé oninput no es parte de la W3C DOM spec, pero todos los navegadores que he probado este código con Cromo-2, Safari 4, Firefox 3, Opera 10, IE6, IE7-apoyo oninput o onpaste. Fuera de todos estos navegadores, sólo Opera no admite onpaste, pero sí que es compatible oninput.

Nota: Esto no funciona en una consola o cualquier otro sistema que utiliza un teclado en pantalla (suponiendo que el teclado en pantalla no enviar claves para el navegador cuando cada tecla está activada). Si es posible su página/app podría ser usado por alguien con un teclado en pantalla y la Ópera (por ejemplo: Nintendo Wii, algunos teléfonos móviles), no utilice este script, a menos que hayas probado para asegurarse de que el teclado en pantalla envía claves para el navegador después de cada una de las teclas de selección.

15voto

Sheff Puntos 1533

Usted puede..... pero no.

Usted no debe alterar el comportamiento por defecto de los usuarios del navegador. Realmente es mala usabilidad de la aplicación web. Asimismo, si un usuario desea deshabilitar este hack, a continuación, que sólo puede deshabilitar javascript en su navegador.

Sólo añadir estos atributos en el cuadro de texto

ondragstart="return false" onselectstart="return false"

7voto

Richard Puntos 432

Cómo sobre el envío de un correo electrónico de confirmación a la dirección de correo electrónico que el usuario ha entrado dos veces en la que hay un enlace a una confirmación de la URL de su sitio, entonces usted sabe que ellos han recibido el mensaje?

Alguien que no haga clic para confirmar la recepción del correo electrónico puede haber introducido su dirección de correo electrónico incorrecta.

No es una solución perfecta, pero sólo algunas ideas.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X