2009-11-04 23 views
5

Sto provando a impostare uno stile CSS usando .live(). La funzione CSS:jQuery .live() e Document ready

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

Esiste un modo perché questo avvenga automaticamente documento pronto, ma ancora accadere per gli elementi futuri? Ho un evento Ajax nella pagina che riordina un tavolo. Ho bisogno di queste righe appena create per applicare a .addClass.

Grazie in anticipo.

+0

puoi aggiungere la classe nella chiamata ajax? – Jason

+0

@Jason, potrei ma come ho detto in seguito in un commento, voglio evitare di dover riscriverlo per sempre una chiamata ajax che faccio. Dovrei solo chiamarlo una volta. – jay

risposta

5

potresti usare lo Livequery plugin. Essa si impegna a eventi di mutazione DOM per tenere traccia delle modifiche nel DOM, e ri lega e ri esegue il codice ad essi connessi, ad esempio:

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

@ pǝlɐɥʞ, questa è un'ottima soluzione quindi +1. Mi sembra ancora che ci debba essere un modo per usare .live() per farlo. L'idea è di mettere il .addClass in $ ("body"). Live ("load", function() {}); che non funziona ovviamente. C'è una soluzione come questa o sono rassegnato a utilizzare un plug-in? – jay

+0

@jeerose Ho paura che dovresti usare un plugin per questo caso ... Perché jQuery.live() è solo per gli eventi vincolanti, e quello che stai cercando di fare qui non è chiaramente un evento – ekhaled

+0

Puoi trovare su quale evento Livequery è vincolante per il documento, e fai la tua delega personale su quello stesso evento. – Mark

1

Abbiamo raggiunto questo obiettivo collegandoci ai delegati dell'evento Ajax e facendo tutto ciò che vogliamo. Vedi "Completa" qui: http://docs.jquery.com/Ajax/jQuery.ajax#options

Si utilizzerà Live per collegare qualsiasi gestore di eventi a quelle nuove righe. Vedi: http://docs.jquery.com/Events/live#typefn

+0

Stavo usando completo. Ho solo pensato che ci sarebbe stata una soluzione più efficiente dato che ora ho la funzione che si attiva quando il DOM è pronto, quindi devo collegarlo a qualsiasi chiamata Ajax che ho. Preferirei non dovermi preoccupare di ricordare di farlo. Significa anche che lo sto scrivendo più e più volte per ogni chiamata Ajax. Pensieri? – jay

+0

Non è necessario scriverlo, basta chiamare lo stesso metodo in entrambe le posizioni. – Mark

0

In questo momento il nostro JavaScript è la creazione di una funzione chiamata AJAX globale che accetta i parametri necessario. L'utilizzo di una funzione modello con parametri di estensione disponibili per causare le modifiche che si desidera apportare potrebbe eliminare qualsiasi codice duplicato non necessario e aprire possibilità per un codice più gestibile.

Esempio:

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

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

Ciò consentirebbe il codice per avere la disponibilità generico per dopo l'elaborazione Ajax.

Spero che questo aiuti nel contesto delle tue esigenze, se non capisco il commento per farmi sapere!

Problemi correlati