Question

Je suis en train de charger un fichier jsp-dans une boîte de dialogue jQuery UI http://jqueryui.com/ demos / dialogue / . Le jsp contient un fullCalendar http://arshaw.com/fullcalendar/ calendrier. Les appels de la console pour calLoader.jsp qui plus ou moins ne contient que:

<jsp:include page="../cal.jsp"/>

Quand j'ouvre la boîte de dialogue pour la première fois, tout fonctionne très bien, mais après que je ferme la boîte de dialogue et d'essayer de l'ouvrir à nouveau, je reçois le stacktrace suivant de Chrome:

Uncaught RangeError: Maximum call stack size exceeded
d.d.extend._Deferred.f.resolveWith
d.d.extend._Deferred.f.done
d.d.fn.d.ready
d.d.fn.d.init
d.d
(anonymous function)
d.d.extend.globalEval
ba
d.d.extend.each
d.fn.extend.domManip
d.fn.extend.append
d.fn.extend.html
d.fn.extend.load.d.ajax.complete
d.d.extend._Deferred.f.resolveWith
v
d.support.ajax.d.ajaxTransport.send.c

Le problème est le même dans Firefox, mais je reçois le message:

too much recursion
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

Je me rends compte que je suis en train de charger la même chose plus d'un et qu'il a besoin d'une certaine façon être soit réutilisée ou déchargée / enlevé et rechargées, mais je n'ai pas la moindre idée comment faire.

Voici le code que j'utilise pour ouvrir le calendrier (a été demandé).

function openCalendar() {
    var dialog = jQuery('<div id="calendaropener"></div>')
    .dialog({
        autoOpen: false,
        draggable: true,
        modal: false,
        resizable: false,
        width: 820,
        height: 750,
        position: [50, 50],
        title: 'Kalender',
        close: function(ev, ui) { calendarObj = null; }
    });
    dialog.load("calLoader.jsp");
    dialog.dialog('open');
}

Le openCalendar () de fonction est appelée à partir d'un bouton sur ma page. Merci!

Était-ce utile?

La solution

Je dirais que, après la fermeture de la première, il est caché seulement et vous créez un autre élément avec le même identifiant, qui cause un problème avec le processus de chargement. Idéalement, pour exercer un peu plus de contrôle sur les DOM Je commencerais d'avoir mon calendrier d'ouverture div dans la page principale, créant alors la boîte de dialogue en tant que tel:

$("#calendaropener").dialog(...

Cela peut vous aider à gérer / debug un peu plus facilement.

Si vous ne voulez pas faire cela, alors vous pourriez essayer d'ajouter à votre fonction de fermeture:

close: function(ev, ui) { calendarObj = null; $(this).remove(); }

Cela permettra d'assurer l'élément est retiré du DOM afin que vous n'êtes pas allez obtenir des questions bizarres qui pourraient découler d'ajouter l'élément plus d'une fois.

Enfin, si vous ne voulez juste poignée cachette et réouverture (en supposant que cela ne casse pas votre logique), vous pouvez alors déclencher la dialog.load("calLoader.jsp"); conditionnelle, par exemple:.

if($(dialogSelector).html().length == 0) {
    dialog.load("calLoader.jsp");
}

Hope quelque chose aide!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top