109 votes

Boîte de dialogue jquery ui: impossible d'appeler des méthodes dans une boîte de dialogue avant l'initialisation

J'ai une application sur jquery 1.5 avec des boîtes de dialogue a bien fonctionné. Bien que j'ai beaucoup de gestionnaires de live, j'ai changé ceci en .on. Pour cela, je dois mettre à jour jquery (maintenant 1.8.3 et 1.9.1).

Maintenant, j'ai: Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'

Voici le code:

Javascript

 var opt = {
        autoOpen: false,
        modal: true,
        width: 550,
        height:650,
        title: 'Details'
};

$(document).ready(function() {
$("#divDialog").dialog(opt);
    $("#divDialog").dialog("open");
...    
 

Code HTML

 <div id="divDialog">
<div id="divInDialog"></div>
</div>
 

Une idée pourquoi cela pourrait se produire?

144voto

Kneel-Before-ZOD Points 1935

Essayez ceci à la place

 

   $(document).ready(function() {
     $("#divDialog").dialog(opt).dialog("open");
   }   
  

Vous pouvez aussi faire:

 var theDialog = $("#divDialog").dialog(opt);
theDialog.dialog("open");
 

En effet, la boîte de dialogue n'est pas stockée dans $ ('# divDialog'), mais sur un nouveau div créé à la volée et renvoyé par la fonction .dialog(opt) .

25voto

Cymen Points 4176

Si vous ne pouvez pas mettre à niveau jQuery et que vous obtenez:

 Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'
 

Vous pouvez le contourner comme suit:

 $(selector).closest('.ui-dialog-content').dialog('close');
 

Ou, si vous contrôlez la vue et savez qu'aucun autre dialogue ne doit être utilisé sur la page entière, vous pouvez effectuer les opérations suivantes:

 $('.ui-dialog-content').dialog('close');
 

Je ne le recommanderais que si closest causait un problème de performances. Il existe probablement d'autres moyens de contourner le problème sans effectuer une fermeture globale de tous les dialogues.

10voto

johntrepreneur Points 858

J'ai eu cette erreur quand j'ai mis à jour la bibliothèque jquery sans mettre à jour le jqueryui bibliothèque en parallèle. J'ai été en utilisant jquery 1.8.3 avec jqueryui 1.9.0. Cependant, lorsque j'ai mis à jour jquery 1.8.3 à 1.9.1 j'ai l'erreur ci-dessus. Quand j'ai commenté la délinquance .close méthode des lignes, puis il a jeté une erreur à propos de ne pas trouver d' .browser dans la bibliothèque jquery qui a été dépréciée en jquery 1.8.3 et retiré de jquery 1.9.1. Donc bascially, le jquery 1.9.1 bibliothèque n'était pas compatible avec le jquery ui 1.9.0 bibliothèque en dépit de l'interface utilisateur de jquery page de téléchargement de dire qu'il fonctionne avec jquery 1.6+. Essentiellement, il y a des bugs signalés lors de l'utilisation de différentes versions des deux. Si vous utilisez la version jquery qui est livré avec le jqueryui télécharger, je suis sûr que vous allez être bien, mais c'est lorsque vous commencez à l'aide de différentes versions que vous hors des sentiers battus et d'obtenir des erreurs de ce type. Donc, en résumé, cette erreur est de dépareillés versions (dans mon cas en tout cas).

0voto

DamianK Points 1

C'est aussi un travail autour de:

 $("div[aria-describedby='divDialog'] .ui-button.ui-widget.ui-state-default.ui-corner-all.ui-button-icon-only.ui-dialog-titlebar-close").click();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X