2011-06-19 11 views
11

Estoy tratando de cambiar el tipo de entrada, específicamente después de hacer clic en la entrada cambiar type = "text" to change = "password".Cambiar el tipo de un campo de entrada utilizando jQuery (texto -> contraseña)

No sé por qué, pero no puedo agregar la opción type = "password" como atributo a la entrada.

 $('input#id_reg_pass').removeAttr("type"); #this works, type="text" is removing 
     $('input#id_reg_pass').attr('type', 'password'); #problem, this not works 
     $(this).addClass('exampleText').val($(this).attr('title')); 

¿No tienes un problema similar? Voy contenta por cada pista ... Gracias

+0

duplicados de http://stackoverflow.com/questions/1544317/jquery-change-type-of-input-field – thisgeek

Respuesta

6

No se puede cambiar el atributo type después de añadir el elemento a la DOM, si quieres que funcione de la misma manera en todos los navegadores, ver this y this.

A partir de Microsoft Internet Explorer 5, la propiedad type es de lectura/escritura única, pero sólo cuando un elemento de entrada es creada con el método createElement y antes de que se añade al documento .

13

Si estás usando jQuery 1.6, utilice .prop lugar:

$('input#id_reg_pass').removeAttr("type"); 
$('input#id_reg_pass').prop('type', 'password'); 
$(this).addClass('exampleText').val($(this).attr('title')); 

Demostración: http://jsfiddle.net/z8Rj3/

+6

no funcionará en IE – Niklas

+0

@Niklas - ah , demasiado. – karim79

+0

Gracias a todos por sus respuestas. Estoy trabajando con este [tutorial] (http://webservices.blog.gustavus.edu/2008/06/23/text-input-example-text-with-jquery/). Pero incluso si me ayudas (me alegro por ello), todavía estoy luchando con el problema sobre el tipo de entrada = "contraseña" y el texto en esa entrada ... ¿Es posible editar este tutorial para ingresar la contraseña? – user1946705

1

código emita un error para mí, type property can't be changed. Curiosamente, sin embargo, el siguiente código funciona para mí en Chrome, al menos:

$('input#id_reg_pass')[0].type = 'password'; 

Podría ser que esto no funciona entre navegadores sin embargo, lo que explicaría por qué jQuery no lo permite (Como se ha señalado por Niklas, este es el caso). Alternativamente, podría construir un nuevo <input> con los mismos atributos y reemplazar el anterior con el mismo.

+0

verifique mi respuesta. Ese error lo genera jQuery por una razón: "La excepción la arroja jQuery, así que no es un error sino una característica que le permite al programador saber que no funciona". – Niklas

+0

@niklas: Sí, vi tu respuesta.Desafortunadamente, una vez más, es solo IE que no funciona como uno podría esperar razonablemente ... –

5

Tenía exactamente el mismo problema, quería mostrar un texto en un campo de contraseña hasta que el usuario hizo clic sobre él. Hice otro enfoque, en lugar de tratar de cambiar el tipo de campo, lo oculté y mostré un nuevo campo de texto, luego llamé al foco(). Funciona bien.

$("#password_fake").focus(){ 
    $(this).hide(); 
    $("#password").show().focus(); 
} 

donde #password_fake es un campo de texto y #Password un campo de contraseña con style = "display: none".

+0

Esto es genial, pero me sale un error de sintaxis; ¿No debería su función estar dentro del paréntesis? .focus (function() {...}); –

0

Prueba este demo is here

$(document).delegate('input[type="text"]','click', function() { 
    $(this).replaceWith('<input type="password" value="'+this.value+'" id="'+this.id+'">'); 
}); 
$(document).delegate('input[type="password"]','click', function() { 
    $(this).replaceWith('<input type="text" value="'+this.value+'" id="'+this.id+'">'); 
}); 
Cuestiones relacionadas