jquery ui Dialog: impossible d’appeler des méthodes sur un dialog avant l’initialisation

J’ai une application sur jquery 1.5 avec des dialogs fonctionnant correctement. Bien que j’aie beaucoup de gestionnaires .live, je l’ai changé pour .on. Pour cela, je dois mettre à jour jquery (maintenant 1.8.3 un jquerui 1.9.1).

Maintenant, j’ai: Error: cannot call methods on dialog prior to initialization; attempted to call method 'close' 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

 

Une idée de ce qui pourrait arriver?

Essayez ceci plutôt

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

Vous pouvez aussi faire:

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

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

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 ainsi:

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

Ou si vous contrôlez la vue et que vous ne savez pas que d’autres boîtes de dialog doivent être utilisées sur la page entière, vous pouvez faire:

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

Je vous recommanderais de le faire uniquement si l’utilisation de causes les closest pose un problème de performance. Il existe probablement d’autres moyens de contourner ce problème sans fermer globalement toutes les boîtes de dialog.

J’ai eu cette erreur lorsque j’ai seulement mis à jour la bibliothèque jquery sans mettre à jour la bibliothèque jqueryui en parallèle. J’utilisais jquery 1.8.3 avec jqueryui 1.9.0. Cependant, lorsque j’ai mis à jour jquery 1.8.3 à 1.9.1, j’ai eu l’erreur ci-dessus. Lorsque j’ai commenté les lignes offensantes de la méthode .close , une erreur est .browser lors de la recherche de .browser dans la bibliothèque jquery qui était déconseillée dans jquery 1.8.3 et supprimée de jquery 1.9.1. Donc, fondamentalement, la bibliothèque jquery 1.9.1 n’était pas compatible avec la bibliothèque jquery ui 1.9.0 malgré la page de téléchargement de jquery ui indiquant qu’elle fonctionne avec jquery 1.6+. Essentiellement, il existe des bogues non signalés lorsque vous essayez d’utiliser des versions différentes des deux. Si vous utilisez la version de jquery fournie avec le téléchargement de jqueryui, je suis sûr que ça va aller, mais c’est quand vous commencez à utiliser différentes versions que vous sortez des sentiers battus et obtenez des erreurs comme celle-ci. Donc, en résumé, cette erreur provient de versions mal appariées (dans mon cas de toute façon).

Donc, vous utilisez ceci:

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

et si vous ouvrez une vue partielle MVC dans Dialog, vous pouvez créer dans index un bouton masqué et un événement click JQUERY:

 $("#YourButton").click(function() { theDialog.dialog("open"); OR theDialog.dialog("close"); }); 

alors à l’intérieur de la vue partielle html vous appelez le déclencheur du bouton cliquez sur comme:

 $("#YouButton").sortinggger("click") 

à plus.

Si vous souhaitez ouvrir la boîte de dialog immédiatement lorsque le dialog est initialisé ou que la page est prête, vous pouvez également définir le paramètre autoOpen sur true dans l’object options de dialog:

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

Ainsi, vous n’avez pas besoin d’appeler la boîte de dialog `$ (” # divDialog “). (” Open “);

Lorsque l’object de dialog est initialisé, la boîte de dialog s’ouvre automatiquement.

C’est aussi du 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(); 

Je devais simplement append le ScriptManager à la page. Problème résolu.

J’ai eu ce message d’erreur parce que j’avais la balise div sur la vue partielle au lieu de la vue parent