2009-11-04 34 views
5

Estoy tratando de establecer un estilo CSS usando .live(). La función de CSS:jQuery .live() y Documento listo

$(".data tr:odd").addClass("evenrows"); 

¿Hay alguna forma para que esto suceda de forma automática en el documento listo, pero todavía suceder por elementos de futuros? Tengo un evento ajax en la página que reordena una mesa. Necesito estas filas recién creadas para que se les aplique el .addClass.

Gracias de antemano.

+0

¿Puedes agregar la clase en la llamada ajax? – Jason

+0

@Jason, pero como dije a continuación en un comentario, quiero evitar tener que volver a escribirlo para siempre. Solo debería llamarlo una vez. – jay

Respuesta

5

puede usar el Livequery plugin. Que se obliga a los eventos de mutación DOM para realizar un seguimiento de los cambios en el DOM, y re une y re ejecuta código unidos a ellos, por ejemplo:

$(".data tr:odd").livequery(function(){ 
    $(this).addClass("evenrows"); 
}); 
+0

@ pǝlɐɥʞ, esa es una gran solución para +1. Todavía siento que debe haber una forma de usar .live() para hacer esto. La idea es poner .addClass en $ ("cuerpo"). En vivo ("carga", función() {}); que no funciona obviamente ¿Hay una solución como esta o me resigno a usar un complemento? – jay

+0

@jeerose Me temo que tendría que usar un plugin para este caso ... Debido a que el jQuery.live() es sólo para eventos de unión, y lo que está tratando de hacer aquí claramente no es un evento – ekhaled

+0

Usted puede encontrar a qué evento se vincula Livequery en el documento, y haz tu propia delegación de eventos en ese mismo evento. – Mark

1

Hemos logrado esto enganchándonos con los delegados del evento Ajax y haciendo lo que queramos allí. Consulte "Completar" aquí: http://docs.jquery.com/Ajax/jQuery.ajax#options

Utilizaría Live para adjuntar cualquier controlador de eventos a esas filas nuevas. Ver: http://docs.jquery.com/Events/live#typefn

+0

Estaba usando completo. Simplemente pensé que habría una solución más eficiente dado que ahora tengo la función que se activa cuando el DOM está listo, luego tengo que adjuntarlo a cualquier llamada ajax que tenga. Prefiero no tener que preocuparme de recordar hacer eso. También eso significa que lo estoy escribiendo una y otra vez para cada llamada ajax. ¿Pensamientos? – jay

+0

No tiene que escribirlo, solo llame al mismo método en ambos lugares. – Mark

0

En este momento nuestra JavaScript es la creación de una función de llamada Global ajax que acepte los parámetros necesario. El uso de una función de plantilla con los parámetros de extensión disponibles para causar los cambios que desea realizar podría eliminar cualquier código duplicado innecesario y abrir posibilidades para un código más manejable.

Ejemplo:

GlobalObject.AjaxFunction(sUrl, SData, fnOnSuccess, fnOnError, oExtension) 
{ 
    //Set up Ajax process 

    // check type of extension as a function 
    if (typeof oExtension === 'function') 
    { 
     oExtension(); 
    } 
} 

Esto permitiría que el código para tener la disponibilidad genérico para después del procesamiento ajax.

Espero que esto ayude en el contexto de sus necesidades, si no entendí el comentario para dejarme saber!

Cuestiones relacionadas