2010-06-24 10 views
8

Entonces en una página específica tengo un número de elementos de formulario, en cualquier lugar entre 3 y 8, dependiendo del usuario y su acción en la página.Agregue un onBlur a todos los elementos de formulario

¿Cómo puedo agregar un evento onblur específico a todos los elementos del formulario dinámicamente en la página?

Si tengo:

function doThisOnBlur() { stuff } 

¿Cómo puedo añadir esa misma función a todos ellos una vez que se carga la página. No se crean elementos después de cargar la página, pero pueden aparecer diferentes elementos para diferentes usuarios.

<input type="text" id="x"> 
<input type="text" id="y"> 
<select id="z">...</select> 

¿Es esto posible?

+0

¿Específico como único para cada elemento? Sobre la marcha como en elementos creados dinámicamente? – Matt

Respuesta

14

Editar: Para la pregunta actualizado
Uso .blur() y una función anónima para esto (no importa cuántos elementos hay):

$(":input").blur(function() { 
    //do stuff 
}); 

Si necesitas asociar ciertas funciones a ciertos campos , use clases o un attribute selector en el nombre, cualquier cosa para distinguirlos ... si el selector no encuentra un elemento, simplemente no vinculará un controlador de eventos a nada. De esta forma, el mismo código general funciona para todos los usuarios, incluso si solo ven algunos de los elementos de formulario disponibles.


Para pregunta original: si los elementos se añadieron dinámicamente después de la página de carga.
creo .live() para capturar el evento blur es lo que está buscando aquí, usando :input como selector:

$(":input").live('blur', function() { 
    //do stuff 
}); 
+0

o '$ (": entrada "). Blur (función() {..});' Live mira la página para ver elementos futuros, y eso no es realmente necesario si no agrega elementos después de que se carga la página. Ambos funcionarán sin embargo. –

+0

@Jim - La pregunta fue editada para aclarar después de publicar esta respuesta, actualizaré para incluir su edición. –

7

Sin jQuery:

function doThisOnBlur(){ 
// your fancy code 
} 

var inputs = document.getElementsByTagName('input'); 
var selects = document.getElementsByTagName('select'); 

for (var i = 0; i < inputs.length; i++) 
    inputs[i].onblur = doThisOnBlur; 
for (var i = 0; i < selects.length; i++) 
    selects[i].onblur = doThisOnBlur; 

que la convirtió en la más simple que pude. Refactorizaría eso y no asignaría manejadores de eventos de esta manera, pero apunté para responder a su pregunta.

+0

¿Cómo funciona esto para los elementos añadidos dinámicamente? :) –

+0

si quiere vincular elementos dinámicos, entonces yo usaría jQuery: live para hacer esto, ¡ellos tienen esta función casi lista para usar! – RobertPitt

+0

No sé por qué escribí eso, debería verificar su nombre y darme cuenta de que ha publicado una respuesta no una pregunta:/lo siento – RobertPitt

Cuestiones relacionadas