2009-11-04 16 views
5

Próbuję ustawić styl CSS przy użyciu .live(). Funkcja CSS:jQuery .live() i dokument gotowy

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

Czy istnieje sposób, aby tak się stało automatycznie na dokumencie gotowy ale jeszcze zdarzyć dla przyszłych elementów? Mam zdarzenie ajax na stronie, które ponownie zamawia tabelę. Potrzebuję tych nowo utworzonych wierszy, aby zastosować do nich metodę .addClass.

Z góry dziękuję.

+0

czy możesz dodać klasę w wywołaniu ajax? – Jason

+0

@Jason, mogłem, ale jak powiedziałem poniżej w komentarzu, chcę uniknąć konieczności ponownego napisania go na zawsze wywołanie ajax, które robię. Powinienem go tylko raz nazwać. – jay

Odpowiedz

5

można użyć Livequery plugin. Wiąże się do DOM zdarzeń mutacji śledzić zmiany w DOM, i ponownie wiąże i re który zaciągnął kod dołączony do nich, np:

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

@ pǝlɐɥʞ, to świetne rozwiązanie, więc +1. Nadal czuję, że musi być sposób, aby użyć .live(), aby to zrobić. Chodzi o to, aby umieścić .addClass w $ ("body"). Live ("load", function() {}); co nie działa w sposób oczywisty. Czy istnieje takie rozwiązanie, czy zrezygnowałem z używania wtyczki? – jay

+0

@jeerose Obawiam się, że musiałbyś użyć wtyczki dla tego przypadku ... Ponieważ jQuery.live() jest tylko dla zdarzeń wiążących, a to, co próbujesz tutaj zrobić, nie jest oczywiście wydarzeniem – ekhaled

+0

Możesz znaleźć które wydarzenie jest powiązane z dokumentem na temat Livequery, i wykonaj własne wydarzenie na ten sam event. – Mark

1

Osiągnęliśmy to, wciągając uczestników delegacji Ajax i robiąc, co chcemy. Zobacz "Complete" tutaj: http://docs.jquery.com/Ajax/jQuery.ajax#options

Możesz użyć Live do przyłączenia dowolnych procedur obsługi zdarzeń do tych nowych wierszy. Zobacz: http://docs.jquery.com/Events/live#typefn

+0

Użyłem kompletny. Po prostu pomyślałem, że będzie bardziej wydajne rozwiązanie, biorąc pod uwagę, że teraz mam funkcję, która uruchamia się, gdy DOM jest gotowy, a następnie muszę dołączyć go do wszystkich wywołań ajaxowych, które mam. Wolałbym nie martwić się o to, by pamiętać o tym. Oznacza to również, że piszę to w kółko dla każdego wywołania ajax. Myśli? – jay

+0

Nie musisz tego pisać, po prostu wywołaj tę samą metodę w obu miejscach. – Mark

0

Teraz nasza JavaScript jest utworzenie globalnego ajax funkcji połączeń, które akceptuje parametry potrzebne. Używanie funkcji szablonu z dostępnymi parametrami rozszerzenia, aby spowodować zmiany, które chcesz wprowadzić, może wyeliminować niepotrzebny duplikat kodu i otworzyć możliwości łatwiejszego do zarządzania kodu.

Przykład:

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

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

Pozwoliłoby kodu mieć ogólny dostępności po przetworzeniu Ajax.

Mam nadzieję, że pomoże to w kontekście Twoich potrzeb, jeśli nie bardzo rozumiem komentarz, aby dać mi znać!

Powiązane problemy