2009-11-04 4 views
5

J'essaie de définir un style CSS en utilisant .live(). La fonction CSS:jQuery .live() et Document prêt

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

est-il un moyen pour que cela se produise automatiquement sur le document prêt, mais encore se produire pour les futurs éléments? J'ai un événement ajax sur la page qui réorganise une table. J'ai besoin de ces nouvelles lignes pour que le .addClass leur soit appliqué.

Merci d'avance.

+0

pouvez-vous ajouter la classe dans l'appel ajax? – Jason

+0

@Jason, je pourrais mais comme je l'ai dit ci-dessous dans un commentaire, je veux éviter d'avoir à le réécrire pour chaque appel ajax que je fais. Je devrais seulement l'appeler une fois. – jay

Répondre

5

vous pouvez utiliser le Livequery plugin. Elle se lie à des événements de mutation DOM pour suivre les changements dans les DOM, et re se fixe et re exécute le code est joint, par exemple:

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

@ pǝlɐɥʞ, c'est une excellente solution donc +1. J'ai toujours l'impression qu'il doit y avoir un moyen d'utiliser .live() pour le faire. L'idée est de placer le .addClass dans $ ("body"). Live ("load", function() {}); ce qui ne fonctionne pas évidemment. Y a-t-il une solution comme celle-ci ou suis-je résigné à utiliser un plug-in? – jay

+0

@jeerose Je crains que vous ne deviez utiliser un plugin pour ce cas ... Parce que le jQuery.live() est pour les événements de liaison seulement, et ce que vous essayez de faire ici n'est clairement pas un événement – ekhaled

+0

Vous pourriez trouver sur quel événement Livequery est lié au document, et faites votre propre délégation d'événement sur ce même événement. – Mark

1

Nous avons accompli cela en nous connectant aux délégués de l'événement Ajax et en faisant ce que nous voulons. Voir "Terminé" ici:

Vous utiliseriez Live pour attacher n'importe quel gestionnaire d'événement à ces nouvelles lignes. Voir: http://docs.jquery.com/Events/live#typefn

+0

J'utilisais complet. Je pensais juste qu'il y aurait une solution plus efficace étant donné que maintenant j'ai la fonction qui se déclenche lorsque le DOM est prêt, alors je dois l'attacher à tous les appels ajax que j'ai. Je préférerais ne pas avoir à me souvenir de le faire. Aussi, cela signifie que je l'écris encore et encore pour chaque appel ajax. Pensées? – jay

+0

Il n'est pas nécessaire de l'écrire, il suffit d'appeler la même méthode dans les deux cas. – Mark

0

En ce moment, notre JavaScript est mise en place d'une fonction d'appel global ajax qui accepte les paramètres nécessaire. L'utilisation d'une fonction de gabarit avec des paramètres d'extension disponibles pour provoquer les modifications que vous voulez apporter pourrait éliminer tout code dupliqué inutile et ouvrir des possibilités pour un code plus maniable.

Exemple:

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

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

Cela permettrait à votre code d'avoir la disponibilité générique après le traitement ajax.

Espérons que cela aide dans le contexte de vos besoins, si je n'ai pas tout à fait comprendre le commentaire pour me le faire savoir!