Wie man JQuery DatePicker arbeiten nach dynamisch geladen wird, in einer teilweisen Ansicht?
Habe ich verloren jquery-datepicker-Funktionalität in diesem Szenario...
1 - Ursprünglich hatte ich eine normale Ansicht, die fein gearbeitet, dass dieser code für das Datum-input -...
<input type="text" name="date_start" id="date_start"
value="@(Model.TimeStart)" />
<script language="javascript" type="text/javascript">
$("#date_start").datepicker();
</script>
2 - Dann habe ich umgebaut, dass anzeigen in einer Teilansicht, welche dynamisch geladen mit...
$('#TargetEmptyDiv').load("/MyController/MyAction");
3 - Das partial view geladen ok, können die Daten (manuell) eingegeben und alles seine Ordnung. Das problem ist nur, dass die jquery-datepicker funktioniert nicht mehr. Ich versuchte, ordnen Sie es nach dem laden, mit diesem...
$('#TargetEmptyDiv').load("/MyController/MyAction",
function () { $("#date_start").datepicker(); });
Das hat nicht funktioniert.
4 - Später habe ich erfahren, dass jquery bietet die live() und delegate() Funktionen, die in der Lage sind, befestigen Sie javascript-code, um Elemente geladen "jetzt und in der Zukunft". So, ich habe versucht dies in die Dokument-Initialisierung...
<script type="text/javascript">
$(document).ready(function () {
$("#date_start").live("click", function () { $(this).datepicker(); });
});
</script>
später auch...
<script type="text/javascript">
$(document).ready(function () {
$("#date_start").delegate("click", function () { $(this).datepicker(); });
});
</script>
keiner von denen gearbeitet, vielleicht, weil Sie direkten Bezug zu den "click" - Ereignis, aber der datepicker ist "angeschlossen" (wenn das der richtige Begriff) auf das ganze element.
So, Frage ist:
Wie man die jquery-datepicker arbeiten, die auf Elementen geladen nach dynamischer Belastung???
Vielen Dank für Ihre Zeit!
GELÖST:
Das problem war, dass an der Unterseite der _Layout.cshtml gibt es diese Zeile...
@Scripts.Render("~/bundles/jquery")
..der lädt die minified version von jquery Bibliotheken (bereits verwiesen, auch von mir selbst).
So, die Bibliotheken wurden zweimal geladen und bekam unwirksam, die den Fehler produziert "datepicker() ist keine Funktion".
Einfach kommentieren oder löschen, die Zeile macht alle funktionieren!
- Einfach zu starten, einfach, haben Sie inklusive jquery.ui, um sicherzustellen, datepicker zur Verfügung steht?
- Was hat nicht funktioniert in
3
? - Haben Sie mehr als ein element mit dem ID -
date_start
? - Die Zuordnung der datepicker auf ein click-Ereignis ist wohl keine sehr gute Idee, da machen Sie das mehrere Male, und es könnte zu Problemen oder Fehlern. undefined ist ein guter Punkt über die eindeutige id der Frage.
- jquery.ui verwiesen. Der datepicker hat funktioniert, ok, bevor die Elemente waren, die dynamisch geladen werden in einer Teilansicht.
- Was hat nicht funktioniert in 3 ist das jquery-datepicker-dialog-box (nicht gezeigt).
- Versuchen Sie, diese
$("[id=date_start]").datepicker();
Wenn dies für Sie arbeitet, sollten Sie ändern-IDs zu Klassen. - dein code funktioniert hier GEIGE
- Sie haben versucht, rufen Sie das Skript direkt aus der teilweisen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den folgenden jQuery in der Basis-Ansicht, nicht die Teilansicht
Dies funktioniert, wenn eine Teilansicht ist, die dynamisch geladen werden und auf die Seite laden.
Ihre Herangehensweise in #3 sieht für mich aus wie es sollte gearbeitet haben, so scheint es, müssen Sie etwas Debuggen. Versuchen Sie dies:
debugger
Zeile, um Ihren code (siehe Beispiel unten)Was passieren sollte ist, dass Ihr browser wird angehalten, an diesem Punkt. Jedoch, wenn Dinge nicht so funktionieren wie Sie es erwarten, ist es vielleicht nicht schlagen, dass der code an alle, und dann würden Sie bekommen keine pause.
Wenn Sie nicht bekommen, eine pause, die Konsole zu untersuchen, den Wert von
$("#date_start")
; es ist möglich, dass der jQuery-Selektor nicht greifen, was Sie denken, es ist.Hier ein
debugger
Beispiel mit dem code:$("#date_start")
ist, hat es keine datepicker-Methode. Es könnte andere Gründe haben, aber der wahrscheinlichste Grund ist, dass etwas schief ging jQuery-UI-Einbindung script-tag. Vielleicht lohnt es sich, überprüfen Sie den Pfad, an diesem tag? Auch dies klingt vielleicht blöd, aber mit jQuery UI, können Sie download-Versionen der Bibliothek, ohne bestimmte Teile enthalten, sind Sie sicher, dass Ihre Kopie hat den Datum-picker?<script src='yourCode.js'></script><script src='jQueryUI.js'></script>
dann jQuery UI kann nicht geladen werden, wenn der code ausgeführt wird. Wenn das der Fall ist, schalten Sie die Reihenfolge der der Skript-tags sollten Sie beheben.Auf Ihre teilweise Seite sagen "/MyController/MyAction",
Teilweise Seite Code:
Ganze Seite(Seite, Von Wo aus Sie Anrufen Ajax-Request) Code:
rufen Sie die Funktion abc-und Sie sind fertig.vorausgesetzt, Sie haben bereits alle jquery-Dateien geladen werden.
In meinem Fall die Id von dem Feld Datum, dass ich versuchte, hook up der datepicker war nicht das, was ich dachte, es war. Ich bin mit ViewModels und die id bekam, mit dem Präfix ViewModel name des partiellen view.
machineghost Antwort legte mich auf Sie.
So, ich nutze jetzt Charly ' s Antwort, aber anstelle von #Geburtstag habe ich #IdentityModel_BirthDate:
Alles, was Sie brauchen, um die datepicker-Arbeit ist die Schritte 1-3.
Hier ein Beispiel:
http://jsfiddle.net/delrosario/Xd8py/
Du hast datepicker zu arbeiten, ohne das laden der markup dynamisch und Ihre pseudo-code für die dynamische version ist mit sound aus den Schritten 1-3. Das, was Sie brauchen, um zu überprüfen, jetzt ist es sicher zu stellen, dass Ihre Abhängigkeiten geladen werden, bevor dein Hauptprogramm (in diesem Fall stellen Sie sicher, dass jquery und jquery ui verfügbar sind, bevor die Anforderung ausgeführt wird + datepicker-setup).
1) load jquery
2) laden Sie die jquery ui
3) warten Sie, bis der dom fertig ist oder das element, das enthalten Ihre Nutzlast ist fertig
4) führen Sie Ihre Haupt-app, die Schritte 1-3 eurer Beschreibung.
So, es wäre so etwas wie dieses.
Nach dem Aufruf von ajax -, hookup Ihre jquery, um die 'ajaxStop" - Veranstaltung. (SIEHE: "@Abschnitt Skripte' )
$(document).ajaxStop übernimmt die post ajax jquery-Aufruf und jetzt datapicker funktioniert nach ajax-call(s). ja...
Hinweis: $(document).fertig... behandelt das erstmalige laden der Seite datapicker Dekoration, aber nach ein ajax-Formular neu laden, datepicker jquery nicht ausgeführt wurde...
Ich habe dieses problem vor. In meiner situation hatte ich
<script src='jQueryUI.js'></script>
verwiesen wird, am unteren Rand der Seite. Verschieben Sie den Verweis auf die oben auf der Seite fixiert es für mich.Scheint, wie #3 zu arbeiten. Aber vielleicht können Sie versuchen, ein hacky Art und Weise, wie diese:
Habe ich diese arbeiten
Action-Methode:
Hauptansicht:
Teilansicht:
Natürlich haben Sie daran zu erinnern zu zählen jquery-ui.js in Ihrem Layout
Mein Verdacht ist, dass dein JS ausgeführt wird, aber Sie haben falsch referenziert jquery-ui. Ich empfehle das hinzufügen von jquery-Bibliotheken auf einer höheren Ebene als eine Teilansicht. Versuchen Sie, die
<script src="jquery-ui.js">
tag entweder in die Seite oder das layout, nicht die eingeschränkte Sicht. Wenn dies nicht beheben, versuchen Siealert("test");
im javascript-code, um sicherzustellen, dass er ausgeführt wird.Ich hatte genau das gleiche problem. Wenn ajax, dann binden Sie die unten jquery-Funktion, um das Dokument. Jedes mal, wenn ajax ausgeführt wird, wird dieses Feuer. Überprüfen Sie heraus die api-doc hier - http://api.jquery.com/category/ajax/global-ajax-event-handlers/
$(document).ajaxComplete(function (){//Ihr code hier})
Ich hatte das gleiche problem, gelöst mit einer früheren version von
JQuery-UI
. In meinem Fall geht die version verwenden1.9.2
und1.10.3
zuJQuery
version1.10.1
. Kenne den Grund, aber ich denke die neuesten Versionen bringen einige Probleme, die Kompaktheit, also wählte ich immer rückwärts in die Vergangenheit.Ich hoffe, es wird nützlich sein,
laden Sie einfach diese Zeile mit dem Inhalt, den Sie zum laden von ajax -
Hallo: Sie setzen Sie folgenden code in der load-Dokument event-script-tag in Ihre Teilansicht :