2010-04-10 24 views
6

Ich entwickle eine Anwendung mit Asp.net mvc und jquery. Ich würde gerne die gleiche Namenskonvention (Klassen und IDs) für HTML-Elemente in verschiedenen Ansichten verwenden.

Wenn ich eine Teilansicht asynchron laden möchte, verliert das $ (document) .ready() Code in der Hauptansicht seine Brauchbarkeit, da keines der HTML-Tags und css-Benennungen von Patiial View von jquery erkannt wird . Ich möchte sicherlich nicht für jede Ansicht den gleichen Code schreiben. Was ist der beste Weg, um dieses Problem zu lösen?

+0

Ich habe eine Lösung hinzugefügt, die für Ereignisse funktioniert, was in den meisten Fällen der Fall ist. Sie können auch Plugins ausführen, usw. Wenn ja, können Sie etwas mehr über das ausführen, was Sie für den dynamisch geladenen Inhalt benötigen? –

Antwort

9

Sie können .live() dafür verwenden, zum Beispiel:

$(".myClass").click(function() { }); 

Wird dies:

$(".myClass").live('click', function() { }); 

.live() Arbeiten in einer anderen Weise. .click() bindet an die Elemente, die der Selektor angepasst , wenn es lief, in der Regel document.ready. .live() funktioniert, indem es im DOM-Stamm lebt und darauf achtet, dass Ereignisse platzen und der Handler ausgeführt wird, wenn das Ereignis, dass das Ziel der Blase mit dem Selektor übereinstimmt.

+1

es funktioniert für Klicks !!! Was ist mit Plugins, die Elemente in verschiedenen Teilansichten verwenden? Zum Beispiel muss die Datatable() jQuery-Plugin für alle Elemente arbeitet, die eine Klasse = „Raster“, unabhängig von der Ansicht, dass sie von – xantrus

+0

kommen sind Wenn ich Ihre Frage richtig das ist kein Problem verstehen. Sie können $ (". Grid"). Live ([Ereignisname], function() {}) ... im Dokument verwenden, um es an jedes Ereignis in jeder von Ihnen verwendeten Teilansicht zu "binden". –

+0

@ user252160 - Wie laden Sie diese '$ .ajax'? –

0

Ich persönlich lade einfach den gesamten Inhalt mit meinen eigenen Wrappern um $ .post, und initialisiere dort den Inhalt nach Bedarf. Dies hilft auch, Fehler bei der Handhabung, wartende Benachrichtigungen usw. zu vereinheitlichen.

Bibliotheken von Drittanbietern bieten normalerweise auch die Möglichkeit, Ajax-geladenen Inhalt vorzuverarbeiten.

Teilansichten rufen document.ready nicht auf, aber sie werten Skripte innerhalb von Script-Tags in head aus, sodass Sie den Aufruf von teilansichtsspezifischen Skripts erzwingen können.

Eine andere Möglichkeit, die ich verwende, ist benutzerdefinierte HTML-Tags auf Formularen. Z.B.

und mein $ .post-Handler wird nach diesem Tag suchen und diese Funktion aufrufen und die Formularinstanz übergeben. Dies hilft, den Umfang des Skripts einzugrenzen, wenn Partial geladen wird (nützlich, wenn mehrere Partitionen auf derselben Seite geladen werden können).

Verwandte Themen