jQuery UI DatePicker Hängt beim zweiten Aufruf

8

Ich erstelle eine ASP.NET MVC3-Anwendung, die jQuery Datepicker und Timepicker in einem Dialogfeld verwendet. Der Code ist ziemlich einfach, nur Lokalisierung:

%Vor%

Kein Geheimnis hier.

Der Datepicker funktioniert gut, wenn er das erste Mal verwendet wird. Als ich ein zweites Mal benutzt habe, hängt der Browser (irgendein Browser) und bietet mir an, die Skriptausführung von jquery-1.6.4.min.js zu stoppen. Um den Fehler zu reproduzieren, lade ich einfach die ganze Seite neu.

Was fehlt mir hier?

Aktualisieren

Code für das Modal hinzufügen:

Zuerst konfiguriere ich, dass alles mit class = 'modal' einige grundlegende Parameter hat:

%Vor%

Dann erweitere ich jQuery um einige Funktionen. Einer von ihnen setzt die Tasten und sendet:

%Vor%

})

AKTUALISIEREN

Ich habe etwas recherchiert und festgestellt, dass das Problem mit DatePicker und Ajax besteht. Jedes Mal wird der Datepicker bei jedem Ajax-Aufruf "double call" genannt. Etwas sehr ähnlich zu dieser Frage . Aber der Datepicker bleibt hängen, auch wenn ich den Dialog gerade schließe, was bedeutet, dass das Problem beim ersten Ajax-Aufruf beginnt.

Kann mir jemand helfen, das zu beheben? Vielleicht wird irgendwo false zurückgegeben oder der Datepicker zerstört, bevor ein neuer erstellt wird.

UPDATE 01/12/2012

Entschuldigung für die Verzögerung, Leute und danke für die Hilfe. Keine der hier veröffentlichten Lösungen funktionierte. Aber ich danke euch allen nochmals für die Hilfe.

Ich habe eine boolesche Eigenschaft $. datepicker.initialized gefunden, die beim ersten Laden des Dialogfelds false zurückgibt und beim zweiten Mal true zurückgibt. Jetzt kann ich den Absturz beim zweiten Mal vermeiden. Erstes Problem gelöst. Aber ich weiß immer noch nicht, wie man den Datepicker "reinitialisiert", damit er angezeigt werden kann, wenn auf die Textbox geklickt wird.

Ich suche immer noch nach einer Möglichkeit, es neu zu initialisieren.

Ändert auch den OK-Button-Code und funktioniert gut:

%Vor%

Die Funktion $ form.serialize () gibt bereits den HTML-Code in der data -Variable zurück, also muss ich nur den Inhalt abrufen und als HTML des maindiv festlegen .

    
programad 08.11.2011, 12:22
quelle

5 Antworten

4

Sie verwenden die Methode "load" für Ihre Zwecke falsch. Das Standardverhalten von jQuery für die load-Methode, wenn kein Selektor übergeben wird, besteht darin, den angegebenen URL aufzurufen, das auf dieser Seite vorhandene JavaScript auszuführen und dann das DOM in das jQuery-Objekt zu laden, das es aufruft.

Wenn Sie einen Selektor an Ihre load-Methode übergeben, führt die jQuery load-Methode das Skript nicht aus und lädt nur das dom in Ihrem jQuery-Objekt.

Ändern Sie es in:

%Vor%

Dies setzt voraus, dass Ihre "telaAtual" -URL #maindiv auf der Seite hat und dann alle untergeordneten Elemente erhält und in das "#maindiv" jQuery-Objekt lädt.

Wir können noch weiter gehen und die Einzelheiten des Hängens herausfinden, aber das Problem der Last zu lösen, wird als erstes in Betracht gezogen werden. Wenn es weiter hängt, ist es eine weitere Untersuchung wert.

    
Jason Sebring 19.12.2011, 06:53
quelle
5

Versuchen Sie diese jquery datetimepicker Funktion, wenn Sie den Dialog absenden oder den Dialog abbrechen.

%Vor%     
Talha 21.12.2011 04:55
quelle
2

Nur eine Vermutung, keine Antwort:

Versuchen Sie den Dialog zu entfernen und nicht nur zu schließen.

%Vor%

Vielleicht hilft das?

Übrigens: Damit klicken Sie auf den "OK" -Button, indem Sie den Dialog öffnen, oder?

%Vor%

Und dann laden Sie etwas Inhalt, so dass passiert, wenn der Dialog geöffnet wird?

%Vor%

Und wenn der telaAtual Inhalt zurückgibt, der den Dialog wieder öffnet, sind Sie vielleicht in einer Endlosschleife stecken geblieben?

    
Marc 16.12.2011 02:12
quelle
1

In diesem Code könnte das einzige sehr geringfügige Syntaxproblem das letzte unnötige Komma nach dem dayNamesMin sein. Sollte kein Hängen verursachen, aber entfernen Sie es und versuchen Sie es. Ansonsten sieht dieser Code gut aus, also ist das Problem woanders.

    
peterfoldi 08.11.2011 13:02
quelle
0

Ich habe das gleiche Problem hier, und in meinem Fall funktionierte diese Lösung:

Ссылка

Ich gebe der Eingabe-ID von datepicker eine zufällige Zeichenfolge zu.

    
Gabriel 16.08.2012 12:39
quelle