2010-02-19 10 views
5

Soy nuevo en javascript. Quiero obtener toda la contraseña del tipo de entrada en mi página html.Obtener todo el tipo de entrada contraseña

Sé que hay una forma de hacer este tipo de cosas usando Javascript, pero no sé cómo.

Luego, con cada uno, deseo asignar un evento al texto modificado.

¿Cómo puedo hacer esto?

Gracias

+0

¿Qué quiere decir con "tipos de introducción de contraseña"? – Gumbo

+1

rpf

Respuesta

11

que presumen que quiere decir

<input type="password"> 

Si es así, puede intentar una función como esta:

function getPwdInputs() { 
    var ary = []; 
    var inputs = document.getElementsByTagName("input"); 
    for (var i=0; i<inputs.length; i++) { 
    if (inputs[i].type.toLowerCase() === "password") { 
     ary.push(inputs[i]); 
    } 
    } 
    return ary; 
} 
+2

+1 para usar ===. –

+4

@Marcel Korpel ¿qué diferencia hay en este caso? Si 'inputs [i] .type' es null, esto ya habría arrojado una excepción, y si no es una String,' toLowerCase' no existiría, lanzando también una excepción. Si 'inputs [i] .type' es un String,' toLowerCase' siempre devolverá un String. – Nicole

+0

Espero que no te importe, extendí tu respuesta para usar 'querySelectorAll' si está disponible, me ahorró valiosos segundos para escribir el mío :-) –

0

Esto no se ha probado, pero algo como esto debería funcionar:

var allElem = document.getElementsByTagName(’input’) 

for (i=0; i < allElem.length; i++) { 

      if (allElem[i].getAttribute(’type’)==‘password’) { 

       allElem[i].onchange = //<your onchange function> 
      }  
} 
3

Y ou puede hacer esto fácilmente usando jQuery:

jQuery("input[type='password']").change(function() { 
    // check input ($(this).val()) for validity here 
}); 
+3

Al OP: si no le importa usar jQuery, esta solución será la mejor opción para usted, ya que tiene un manejo de eventos integrado que no afectará los eventos que ya están en el objeto. Si simplemente configura '.onchange', entonces rompe los manejadores de eventos existentes, y si quiere evitarlo, tendrá que implementar su propia forma de almacenar los manejadores de eventos originales (los resultados serán en código desagradable a menos que ya tenga un sistema para esto). – Nicole

1

jQuery es su amigo. Con jQuery, es tan fácil como con el selector:

$('input[type=password]'); 

y luego un enlace de receptor changed a cada uno:

$('input[type=password]').change(function() 
{ 
    // do whatever here 
}); 
4

espero Robusto no me importa extendiendo su solución un poco para una solución que funcionará mejor en los navegadores modernos. Chrome, Safari, IE8 y Firefox son compatibles con querySelectorAll, por lo que parece más apropiado usarlo si está disponible.

function getPwdInputs() 
{ 
    // If querySelectorAll is supported, just use that! 
    if (document.querySelectorAll) 
    return document.querySelectorAll("input[type='password']"); 

    // If not, use Robusto's solution 
    var ary = []; 
    var inputs = document.getElementsByTagName("input"); 
    for (var i=0; i<inputs.length; i++) { 
    if (inputs[i].type.toLowerCase() === "password") { 
     ary.push(inputs[i]); 
    } 
    } 
    return ary; 
} 

NB. No debería ser un problema, pero podría valer la pena señalar que querySelectorAll devolverá una colección, mientras que el método alternativo devolverá una matriz. Todavía no es un gran problema, ambos tienen la propiedad length y se accede a los miembros de la misma manera.

+1

No, no me importa para nada Andy. Cualquier mejora siempre es bienvenida.Donde trabajo todavía tenemos que soportar IE 6, así que caigo en los hábitos de codificación de denominador común más bajo. Pero tiene razón, document.querySelectorAll, si está disponible, es más económico. – Robusto

Cuestiones relacionadas