2010-08-22 16 views
28

tratando de cambiar el atributo de tipo input de password a text.tipo de entrada de cambio de jQuery

$('.form').find('input:password').attr({type:"text"}); 

¿Por qué esto no funciona?

+1

Fyi, puede usar '.attr ('attrname', 'newvalue')' para establecer un solo atributo. – ThiefMaster

+2

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

+3

@thisgeek Estoy realmente impresionado de que hayas publicado un enlace duplicado para una pregunta con más de dos años de antigüedad. pregunta de hace tres años. – MiniRagnarok

Respuesta

47

No se puede hacer esto con jQuery, it explicitly forbids it porque el IE no lo soporta (comprobar su consola verá un error.

usted tiene que quitar la entrada y crear uno nuevo si eso es lo que está buscando, por ejemplo:

$('.form').find('input:password').each(function() { 
    $("<input type='text' />").attr({ name: this.name, value: this.value }).insertBefore(this); 
}).remove(); 

You can give it a try here

ser claro en la restricción, jQuery no permitirá cambiar type en un <button> o <input> por lo º El comportamiento es consistente en todos los navegadores (dado que IE no lo permite, decidieron que no se permite en todas partes). Al intentar que obtendrá este error en la consola:

Error: type property can't be changed

+21

maldito, encantador IE – James

+0

bah, llévame a eso :-) –

+1

@Andy - ¿No te confunde con tu cuerpo aquí y tu cabeza en meta? :) –

45

mi solución:

$('#myinput').clone().attr('type','tel').insertAfter('#myinput').prev().remove(); 
+3

muy elegante y simple :) –

+4

Buena solución, aunque según la respuesta aceptada, es problemático si tiene eventos conectados a la entrada original, que también se eliminan ... – terraling

+0

¿Cómo funciona '.attr()' en el elemento clonado pero no en el elemento en sí? –

10

Sé que soy un poco tarde para el juego, pero yo era capaz de hacer esto en IE9 (parece que Microsoft decidió permitirlo?). Sin embargo, tuve que hacerlo con JavaScript directo. Esto es solo una muestra de un formulario con una lista desplegable que cambia el tipo de campo dependiendo de lo que se seleccione en el menú desplegable.

function switchSearchFieldType(toPassword) { 
    $('#SearchFieldText').val(''); 
    if (toPassword === true) { 
     $('#SearchFieldText').get(0).setAttribute('type', 'password'); 
    } else { 
     $('#SearchFieldText').get(0).setAttribute('type', 'text'); 
    } 
} 

$('#SelectedDropDownValue').change(function() { 
    if ($("select option:selected").val() === 'password') { 
     switchSearchFieldType(true); 
    } 
    else { 
     switchSearchFieldType(false); 
    } 
}).change(); 
+0

Me gusta esta solución porque no destruir las entradas originales deja intactos los eventos adjuntos ... – terraling

0

Éstos son dos funciones, la aceptación de una serie de selector (s) como un parámetro que va a lograr esto:

// Turn input into Number keyboard 
    function inputNumber(numArr) { 
    if (numArr instanceof Array) { 
     for (var i = 0; i < numArr.length; i++) { 
     if ($(numArr[i]).length > 0) { 
      var copy = $(numArr[i]); 
      var numEle = copy.clone(); 
      numEle.attr("type", "number"); 
      numEle.insertBefore(copy); 
      copy.remove(); 
     } 
     } 
    } 
    } 
    // Turn input into Email keyboard 
    function inputEmail(emailArr) { 
    if (emailArr instanceof Array) { 
     for (var i = 0; i < emailArr.length; i++) { 
     if ($(emailArr[i]).length > 0) {    
      var copy = $(emailArr[i]); 
      var numEle = copy.clone(); 
      numEle.attr("type", "number"); 
      numEle.insertBefore(copy); 
      copy.remove(); 
     } 
     } 
    } 
    } 

A continuación, puede utilizar esto como:

var numberArr = ["#some-input-id", "#another-input-id"]; 
    var emailArr = ["#some-input-id", "#another-input-id"]; 

    inputNumber(numberArr); 
    inputEmail(emailArr); 
5

Este debería funcionar facilmente

$("selector").attr('type', 'hidden'); 
//Changing it to hidden 
8

USO prop lugar attr

$('.form').find('input:password').prop({type:"text"}); 
0
function passShowHide(){ 
    if($("#YourCheckBoxID").prop('checked')){ 
    document.getElementById("EnterPass").attributes["type"].value = "text"; 
    } 
    else{ 
    document.getElementById("EnterPass").attributes["type"].value="password";} 
+0

Esto realmente no responde la pregunta. La pregunta es cómo cambiar el ** tipo **, y este código cambia el ** valor **, e incluso lo hace mal. Esta * podría * ser una respuesta adecuada para una pregunta completamente diferente, pero no para esta pregunta. –

0

Esto es bastante fácil tú. Esto funciona bastante bien.

$('#btn_showHide').on('click', function() { 
    if($(this).text() == 'Show') 
    { 
     $(this).text('Hide'); 
     $('#code').attr('type', 'text'); 
    } 
    else 
    { 
     $(this).text('Show'); 
     $('#code').attr('type', 'password'); 
    } 
    }); 
Cuestiones relacionadas