Wie funktioniert JQuery DatePicker nach dem dynamischen Laden in einer Teilansicht?

8

Ich habe jquery datepicker Funktionalität in diesem Szenario verloren ...

1- Ursprünglich hatte ich eine normale Ansicht, was gut funktionierte, mit diesem Code für die Datumseingabe ...

%Vor%

2- Dann habe ich diese Ansicht in eine Teilansicht konvertiert, die dynamisch mit ... geladen wird.

%Vor%

3- Die Teilansicht wird geladen, die Daten können (manuell) eingegeben werden und alles ist in Ordnung. Das einzige Problem ist, dass der jquery Datepicker nicht mehr funktioniert. Ich habe versucht, es nach dem Laden zuzuweisen, mit diesem ...

%Vor%

Das hat nicht funktioniert.

4- Später habe ich erfahren, dass jquery die Funktionen live () und delegate () zur Verfügung stellt, die Javascript-Code an Elemente anhängen können, die "jetzt und in Zukunft" geladen werden. Also habe ich das in der Dokumenteninitialisierung versucht ...

%Vor%

und später auch ...

%Vor%

Keine davon hat funktioniert, vielleicht, weil sie sich direkt auf das Ereignis "click" beziehen, aber der datepicker ist an das ganze Element angehängt (wenn das der richtige Begriff ist).

Also, Frage ist: Wie man den jquery Datepicker an Elementen arbeitet, die nach dem dynamischen Laden geladen werden ???

Danke für Ihre Zeit!

Gelöst: Das Problem war, dass am Ende von _Layout.cshtml diese Zeile ...

liegt %Vor%

.. was lädt die verkleinerte Version von jquery-Bibliotheken (bereits von mir selbst referenziert). Also, die Bibliotheken wurden zweimal geladen und wurden ungültig, was den Fehler "datepicker () ist keine Funktion" erzeugt.

Wenn Sie nur diese Zeile kommentieren oder löschen, funktioniert alles gut!

    
Néstor Sánchez A. 28.12.2012, 20:22
quelle

14 Antworten

3

Ihr Vorgehen in # 3 sieht für mich so aus, als hätte es funktionieren sollen, also scheint es, als müssten Sie etwas debuggen. Versuchen Sie Folgendes:

  1. Erhalte die Firebug-Erweiterung, wenn du Firefox verwendest (Chrome hat eingebaute Entwicklungswerkzeuge)
  2. Fügen Sie Ihrem Code eine debugger -Zeile hinzu (siehe zum Beispiel unten)
  3. Laden Sie Ihre Seite mit Chrome oder Firebug / Firefox (oder den anderen Devotools eines anderen Browsers)
  4. hoch

Was passieren sollte ist, dass Ihr Browser an diesem Punkt pausiert. Wenn die Dinge jedoch nicht so funktionieren, wie Sie es erwarten, wird dieser Code möglicherweise gar nicht gefunden und Sie erhalten keine Pause.

Wenn Sie eine Pause bekommen, überprüfen Sie den Wert von $("#date_start") ; Es ist möglich, dass der jQuery-Selektor nicht das erreicht, was er zu sein scheint.

Hier ist ein debugger Beispiel mit Ihrem Code:

%Vor%     
machineghost 28.12.2012 20:27
quelle
3

Auf Ihrer Teilseite sagen Sie "/ MyController / MyAction",

Teilseitencode:

%Vor%

Vollständige Seite (Seite von wo Sie Ajax-Anfrage aufrufen) Code:

%Vor%

Rufen Sie die Funktion abc auf, und Sie sind fertig. Nehmen Sie an, Sie haben bereits alle jquery-Dateien geladen.

    
Maulik Shah 09.01.2013 14:33
quelle
3

Fügen Sie die folgende jQuery in der Basisansicht und nicht in der Teilansicht ein

%Vor%

Dies funktioniert, wenn eine Teilansicht dynamisch geladen wird und beim Laden der Seite.

    
Charly 05.06.2014 01:26
quelle
1

Alles, was Sie tun müssen, um den Datepicker arbeiten zu lassen, sind die Schritte 1-3.

Hier ist ein Beispiel: Ссылка

Sie haben datepicker, um zu arbeiten, ohne das Markup dynamisch zu laden, und Ihr Pseudocode für die dynamische Version ist Sound von den Schritten 1-3. Die Sache, die Sie jetzt überprüfen müssen, ist sicherzustellen, dass Ihre Abhängigkeiten vor Ihrem Hauptprogramm geladen werden (in diesem Fall stellen Sie sicher, dass jquery und jquery ui verfügbar sind, bevor Sie das request + datepicker Setup ausführen).

1) lade jquery 2) Laden Sie jquery ui 3) warte, bis das Dom bereit ist oder das Element, das deine Nutzlast enthalten wird, bereit ist 4) Führe deine Haupt-App aus, die die Schritte 1-3 von deiner Beschreibung aus ausführt.

Es wäre also ungefähr so.

%Vor%     
del 09.01.2013 09:20
quelle
1

Nachdem Sie Ajax aufgerufen haben, verbinden Sie Ihre jquery mit dem 'ajaxStop' Event. (SIEHE: '@ section Scripts')

$ (document) .ajaxStop behandelt den post-ajax-jquery-Aufruf und nun funktioniert datapicker nach ajax-Aufruf (en). ja ...

Hinweis: $ (document) .ready ... behandelt die erste Seite beim Laden der Datapicker-Dekoration, aber nach dem erneuten Laden eines Ajax-Formulars wurde datepicker jquery nicht ausgeführt ...

%Vor%     
StevoKeano 21.01.2014 06:52
quelle
1

In meinem Fall war die ID des Datumsfelds, an das ich den Datepicker angeschlossen habe, nicht das, was ich dachte. Ich benutze ViewModels und die ID wurde mit dem ViewModel-Namen meiner Teilansicht vorangestellt.

machitghost's Antwort hat mich darauf gebracht.

Also benutze ich Charly's Antwort, aber anstelle von #BirthDate habe ich #IdentityModel_BirthDate:

%Vor%     
wecky 13.09.2017 14:29
quelle
0

Ich hatte dieses Problem schon einmal. In meiner Situation hatte ich <script src='jQueryUI.js'></script> am Ende der Seite referenziert. Das Verschieben der Referenz auf den Anfang der Seite hat es für mich repariert.

    
ijason03 28.12.2012 22:33
quelle
0

Scheint so, als würde # 3 funktionieren. Aber vielleicht können Sie einen hacky Weg wie folgt versuchen:

%Vor%     
A. Wolff 02.01.2013 18:56
quelle
0

Ich habe das funktioniert

Aktionsmethode:

%Vor%

Hauptansicht:

%Vor%

Teilansicht:

%Vor%

Natürlich müssen Sie daran denken, jquery-ui.js in Ihr Layout aufzunehmen

%Vor%     
Bassam Mehanni 05.01.2013 19:25
quelle
0

Mein Verdacht ist, dass Ihr JS ausgeführt wird, Sie aber jQuery-ui falsch referenziert haben. Ich empfehle, alle jquery-Bibliotheken auf einer höheren Ebene als eine Teilansicht hinzuzufügen. Versuchen Sie, das <script src="jquery-ui.js"> -Tag entweder auf der Seite oder im Layout zu platzieren, nicht in der Teilansicht. Wenn dies nicht behoben wird, versuchen Sie, alert("test"); in Ihrem JavaScript-Code zu setzen, um sicherzustellen, dass es ausgeführt wird.

    
Jestin 07.01.2013 18:11
quelle
0

Ich hatte genau das gleiche Problem. Wenn Sie ajax verwenden, binden Sie die unten stehende jquery-Funktion an das Dokument. Jedes Mal, wenn AJAX ausgeführt wird, wird dies ausgelöst. Schauen Sie sich das api doc hier an - Ссылка

$ (Dokument) .ajaxComplete (function () {// Ihr Code hier})

    
user2430858 29.05.2013 03:08
quelle
0

Ich hatte das gleiche Problem, gelöst mit einer früheren Version von JQuery-UI . In meinem Fall wird die Version 1.9.2 und 1.10.3 bis JQuery version 1.10.1 verwendet. Kennen Sie den Grund, aber ich denke, dass die neuesten Versionen einige Probleme mit der Kompaktheit bringen, so entschied ich mich, immer rückwärts in die Vergangenheit zu gehen. Ich hoffe, es wird nützlich sein

    
Krlos 16.07.2013 15:59
quelle
0
%Vor%

Lade einfach diese Zeile mit dem Inhalt, den du mit ajax laden musst

    
Sher Singh 09.08.2014 07:18
quelle
0

hi: Sie fügen den folgenden Code in das Load Document Event Script-Tag in Ihrer Teilansicht ein:

%Vor%     
HamidReza 24.07.2015 18:31
quelle

Tags und Links