2009-11-04 14 views
5

Ich versuche, einen CSS-Stil mit .live() zu setzen. Die CSS-Funktion:jQuery .live() und Dokument bereit

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

Gibt es eine Möglichkeit für die auf dem Dokument automatisch geschehen bereit, aber immer noch für zukünftige Elemente geschehen? Ich habe ein Ajax-Ereignis auf der Seite, die eine Tabelle neu anordnet. Ich brauche diese neu erstellten Zeilen, damit die .addClass auf sie angewendet wird.

Vielen Dank im Voraus.

+0

Können Sie die Klasse im Ajax-Aufruf hinzufügen? – Jason

+0

@Jason, ich könnte, aber wie ich unten in einem Kommentar gesagt habe, möchte ich vermeiden, es für immer Ajax Anruf ich neu schreiben müssen. Ich sollte es nur einmal anrufen müssen. – jay

Antwort

5

könnten Sie die Livequery plugin verwenden. Es bindet sich an DOM Mutationsereignisse Veränderungen in der DOM zu verfolgen und wieder bindet und wieder ausführt ihnen Code angebracht, zum Beispiel:

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

@ pǝlɐɥʞ, das ist eine großartige Lösung, also +1. Ich habe immer noch das Gefühl, dass es eine Möglichkeit geben muss, .live() zu verwenden, um dies zu tun. Die Idee ist, die .addClass in $ ("body") zu setzen. Live ("load", function() {}); was offensichtlich nicht funktioniert. Gibt es eine Lösung wie diese oder bin ich resigniert, ein Plug-in zu verwenden? – jay

+0

@jeerose Ich fürchte, Sie müssten ein Plugin für diesen Fall verwenden ... Da die jQuery.live() nur für Bindungsereignisse ist, und was Sie hier zu tun versuchen, ist eindeutig kein Ereignis – ekhaled

+0

Sie könnten finden Aus welchem ​​Ereignis LiveQuery für das Dokument bindet, und Sie müssen Ihre eigene Ereignisdelegation für dasselbe Ereignis ausführen. – Mark

1

Wir haben dies erreicht, indem wir uns in die Ajax-Event-Delegierten eingeklinkt haben und tun, was immer wir wollen. Siehe "Complete" hier: http://docs.jquery.com/Ajax/jQuery.ajax#options

Sie würden Live verwenden, um Event-Handler an diese neuen Zeilen anzuhängen. Siehe: http://docs.jquery.com/Events/live#typefn

+0

Ich benutzte komplett. Ich dachte nur, dass es eine effizientere Lösung geben würde, da ich jetzt die Funktion habe, die feuert, wenn das DOM bereit ist, und dann an alle Ajax-Aufrufe anschließe, die ich habe. Ich hätte mir lieber keine Gedanken darüber machen müssen. Das bedeutet auch, dass ich es immer wieder für jeden Ajax-Anruf schreibe. Gedanken? – jay

+0

Sie müssen es nicht schreiben, rufen Sie die gleiche Methode an beiden Orten auf. – Mark

0

Gerade jetzt unsere JavaScript ist eine globale Ajax-Aufruf Funktion der Einrichtung, die die Parameter akzeptiert erforderlich. Die Verwendung einer Template-Funktion mit Erweiterungsparametern, die die gewünschten Änderungen bewirken, könnte unnötigen doppelten Code eliminieren und Möglichkeiten für besser handhabbaren Code eröffnen.

Beispiel:

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

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

Dies würde Ihren Code ermöglicht allgemeine Verfügbarkeit für die Zeit nach Ajax-Verarbeitung zu haben.

Hoffe das hilft im Zusammenhang mit Ihren Bedürfnissen, wenn ich nicht ganz verstehen Kommentar, um es mich wissen zu lassen!

Verwandte Themen