2009-09-05 28 views
7

Tengo un formulario de inicio de sesión habitual que consta de dos campos de entrada, uno para el inicio de sesión, y otro para la contraseña. Actualmente estoy intentando agregar un control que mostrará la contraseña ingresada como texto sin formato, para que el usuario pueda verificar si hay errores tipográficos."Mostrar contraseña como texto" control

El problema es que los navegadores (Firefox por lo menos) no permiten el cambio dinámico de type atributo de campos de entrada, por lo que no puede simplemente cambiar type="password"-type="text". Otro problema es que los navegadores no permiten obtener el valor del campo de contraseña, por lo que no puedo crear un nuevo input type="text" y establecer su valor en el de la contraseña. He visto varios enfoques diferentes para esta tarea, incluido this one, pero solo funcionan si la contraseña se escribe y falla cuando el navegador la autocompleta.

Entonces, cualquier sugerencia para hacer esto es bienvenida. Estoy usando jQuery.

Respuesta

25

Usted puede hacer algo como esto:

<input type="password" id="password"> 
<input type="checkbox" onchange="document.getElementById('password').type = this.checked ? 'text' : 'password'"> Show password 
+0

¡Funciona! Increíble. Parece que mi problema estaba en jQuery que estoy usando. Por alguna razón, no me permitió hacer este truco. – n1313

+4

esto probablemente no funcionará correctamente en IE –

+4

Es más que probable. He confirmado que no funciona en IE. – Guffa

1

Si se me permite, no creo que es una gran idea para mostrar la contraseña en texto, por las siguientes razones:

  1. no se hace comúnmente, por lo que será confuso para el usuario
  2. significa que está abierto a lo largo del hombro de visión de la contraseña

también creo que, si lo que desea es ayudar a los usuarios a evitar errores tipográficos, darles más oportunidades antes de la contraseña está desactivada. Creo que el "3" típico que implementan la mayoría de los sitios no es realmente necesario, sugiero que "10" intentos, o quizás "5", si quieres ser realmente conservador, es bastante aceptable. Simplemente cuenten hacia abajo para ellos, y permítales resolver los errores por su cuenta.

Solo mi humilde opinión.

+0

Por defecto la contraseña es oculta, por supuesto. Si el usuario está haciendo clic en el enlace "Muéstrenme las letras que acabo de escribir en ese campo de contraseña porque no estoy seguro de haberlas escrito correctamente", es probable que entienda lo que está haciendo y sabe lo que sucederá a continuación:) – n1313

+0

Aún así, me parece mal. Aunque cada uno es suyo. –

+2

Incluso los programas donde la seguridad es muy importante como TrueCrypt y la contraseña segura tienen características para permitir que se muestre la contraseña. Especailly en situaciones donde el usuario podría estar usando una contraseña/contraseña muy larga o compleja, poder ver la contraseña puede ser una muy buena característica. Estoy de acuerdo con N1313 en que la persona que hace clic en él probablemente debe verificar si hay usuarios de hombro antes de hacer clic en el botón para revelar la contraseña. – Kibbee

1

que nunca han intentado esto mismo, pero no puedes acceder a la propiedad valor del elemento?

si tiene algo así como ...

<input id="pw" name="pw" type="password" /> 

Luego, en JavaScript/jQuery ...

var pass = document.getElementById('pw').value; 

$('pw').val() 
+0

Ver: http://www.w3schools.com/htmldom/dom_obj_password.asp – Fraser

+0

Espera, qué. Estoy bastante seguro de que intenté esto antes de publicar la pregunta y no funcionó, pero ahora sí. WTF. Necesita más control! – n1313

+0

@Fraser su enlace a w3schools parece estar roto. – fedorqui

0

No hay ninguna posibilidad de mostrar la contraseña autorrellenará por razones de seguridad. Cualquiera puede ver tu contraseña en tu computadora para esta página si es posible.

usted tiene que tratar con el siguiente para solución completa:

  • no se permite Javascript - entonces usted no debe mostrar elegir casilla contraseña
  • Autocompletar está activada - como he escrito, se No se puede mostrar la contraseña llena de esta manera. Eaighter apaga la función de autocompletar u oculta la contraseña del programa hasta que el usuario vuelva a escribir la contraseña.

autocompletar apagar por esta jQuery

$('input').attr('autocomplete', 'off'); 

Para añadir casilla de verificación sobre la marcha puede utilizar siguiente plugin de jQuery-showPassword disponible en http://www.cuptech.eu/jquery-plugins/

0
$('.show-password').change(function() { 
    if ($("#form-fields_show-password").attr('checked')) { 
    var showValue = $('#form-fields_password').val(); 
    var showPassword = $('<input type="text" size="50" required="required" name="form- fields[password]" id="form-fields_password" class="password required" value="'+showValue+'">'); 
    $('#form-fields_password').replaceWith(showPassword); 
    } else { 
    var hideValue = $('#form-fields_password').val(); 
    var hidePassword = $('<input type="password" size="50" required="required" name="form-fields[password]" id="form-fields_password" class="password required" value="'+hideValue+'">'); 
    $('#form-fields_password').replaceWith(hidePassword); 
    } 
}); 

Algo como esto se encuentra la entrada área, y almacenar el valor en una variable llamada showValue. Luego puede reemplazar el elemento con type = "password", con html nuevo donde type = "text" y si la casilla de verificación está desmarcada, el valor se colocará en el campo de tipo de contraseña.

Existe un problema con este método porque el valor del tipo de contraseña será visible en el código; sin embargo, para evitarlo puede eliminar el atributo de valor del tipo de contraseña y obligar al usuario a volver a escribir. Si puedes vivir con eso en tu aplicación.

0
function change(){ 
id.type="password"; 
} 


<input type="text" value="123456" id="change"> 
<button onclick="pass()">Change to pass</button> 
<button onclick="text()">Change to text</button> 
<script>function pass(){document.getElementById('change').type="password";} function text(){document.getElementById('change').type="text"; } </script> 
+0

¿Puedes explicar cómo funciona esto? – rayryeng

+0

¿Cómo proporciona esto una explicación? – rayryeng

-1
Password: <input type="password" value="" id="myInput"><br><br> 
<input type="checkbox" onclick="myFunction()">Show Password 

<script> 
function myFunction() { 
    var x = document.getElementById("myInput"); 
    if (x.type === "password") { 
     x.type = "text"; 
    } else { 
     x.type = "password"; 
    } 
} 
</script> 
Cuestiones relacionadas