la boîte de dialogue modale jQueryUI n'affiche pas le bouton Fermer (x)
J'utilise une boîte de dialogue modale jQuery dans mon application ASP. NET MVC 3. Cela fonctionne bien sauf qu'il n'y a pas de bouton de fermeture dans le coin supérieur droit. Comment puis-je ajouter à cela?
$("#dialog-modal").dialog({
modal: true,
autoOpen: false,
buttons: {
Ok: function () {
$(this).dialog("close");
}
}
});
15 réponses
Dans le coin supérieur droit de la boîte de dialogue, passez la souris sur l'endroit où le bouton devrait être, et voyez plutôt ou non que vous obtenez un effet (le bouton survoler). Essayez de cliquer dessus et de voir si elle se ferme. Si elle se ferme, alors vous manquez juste vos sprites d'image qui sont venus avec votre téléchargement de paquet.
Une autre possibilité est que vous avez la bibliothèque bootstrap. Certaines versions de bootstrap et jQuery-ui ont un conflit avec le .méthode button (), et si votre bootstrap.js est placé après jquery-ui.js, le bootstrap .button () remplace votre bouton jquery et l'image 'X' de jquery-ui n'apparaîtrait alors pas.
Voir ici: https://github.com/twbs/bootstrap/issues/6094
Cela fonctionne (fermer la boîte visible):
<script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
Cela provoque le problème:
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
<script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
J'ai eu ce problème et j'ai pu le résoudre avec la déclaration ci-dessous.
$.fn.bootstrapBtn = $.fn.button.noConflict();
Solution de contournement CSS Pure:
J'utilisais à la fois bootstrap et jQuery UI et changer l'ordre d'ajout des scripts a cassé d'autres objets. J'ai fini par utiliser une solution de contournement CSS pure:
.ui-dialog-titlebar-close {
background: url("http://code.jquery.com/ui/1.10.3/themes/smoothness/images/ui-icons_888888_256x240.png") repeat scroll -93px -128px rgba(0, 0, 0, 0);
border: medium none;
}
.ui-dialog-titlebar-close:hover {
background: url("http://code.jquery.com/ui/1.10.3/themes/smoothness/images/ui-icons_222222_256x240.png") repeat scroll -93px -128px rgba(0, 0, 0, 0);
}
Bien que l'op n'indique pas explicitement qu'ils utilisent l'interface utilisateur jQuery et bootstrap ensemble, un problème identique se produit si vous le faites. Vous pouvez résoudre le problème en chargeant bootstrap (js) avant jQuery ui (js). Cependant, cela causera des problèmes avec les couleurs d'état des boutons.
La solution finale consiste à utiliser bootstrap ou jQuery ui, mais pas les deux. Cependant, une solution de contournement est:
$('<div>dialog content</div>').dialog({
title: 'Title',
open: function(){
var closeBtn = $('.ui-dialog-titlebar-close');
closeBtn.append('<span class="ui-button-icon-primary ui-icon ui-icon-closethick"></span><span class="ui-button-text">close</span>');
}
});
Vérifiez simplement le chemin de l'image du bouton Fermer dans votre interface utilisateur jquery.css:
.ui-icon {
width: 16px;
height: 16px;
background-image: url**(../img/ui-icons_222222_256x240.png)**/*{iconsContent}*/;
}
.ui-widget-content .ui-icon {
background-image: url(../img/ui-icons_222222_256x240.png)/*{iconsContent}*/;
}
.ui-widget-header .ui-icon {
background-image: url(../img/ui-icons_222222_256x240.png)/*{iconsHeader}*/;
}
.ui-state-default .ui-icon {
background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/;
}
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {
background-image: url(../img/ui-icons_454545_256x240.png)/*{iconsHover}*/;
}
.ui-state-active .ui-icon {
background-image: url(../img/ui-icons_454545_256x240.png)/*{iconsActive}*/;
}
Corriger le chemin d'accès de icons_222222_256x240.png
et ui-icons_454545_256x240.png
En utilisant le principe de l'idée user2620505 obtenu un résultat avec l'implémentation de addClass:
...
open: function(){
$('.ui-dialog-titlebar-close').addClass('ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only');
$('.ui-dialog-titlebar-close').append('<span class="ui-button-icon-primary ui-icon ui-icon-closethick"></span><span class="ui-button-text">close</span>');
},
...
Si l'anglais est mauvais pardonnez-moi, j'utilise Google Translate.
Je pense que le problème est que le navigateur n'a pas pu charger le sprite d'image jQueryUI qui contient L'icône X. Veuillez utiliser Fiddler, Firebug ou autre qui peut vous donner accès aux requêtes HTTP que le navigateur fait au serveur et vérifier que le sprite de l'image est chargé avec succès.
J'ai eu le même problème il suffit d'ajouter cette fonction aux options de dialogue ouvert et cela a fonctionné sharm
open: function(){
var closeBtn = $('.ui-dialog-titlebar-close');
closeBtn.append('<span class="ui-button-icon-primary ui-icon ui-icon-closethick"></span>');
},
Et lors de l'événement de fermeture, vous devez supprimer ce
close: function () {
var closeBtn = $('.ui-dialog-titlebar-close');
closeBtn.html('');}
Exemple Complet
<div id="deleteDialog" title="Confirm Delete">
Can you confirm you want to delete this event?
</div>
$("#deleteDialog").dialog({
width: 400, height: 200,
modal: true,
open: function () {
var closeBtn = $('.ui-dialog-titlebar-close');
closeBtn.append('<span class="ui-button-icon-primary ui-icon ui-icon-closethick"></span>');
},
close: function () {
var closeBtn = $('.ui-dialog-titlebar-close');
closeBtn.html('');
},
buttons: {
"Confirm": function () {
calendar.fullCalendar('removeEvents', event._id);
$(this).dialog("close");
},
"Cancel": function () {
$(this).dialog("close");
}
}
});
$("#dialog").dialog("open");
Je suppose qu'il y a un conflit avec une autre bibliothèque JS dans votre code. Essayez de forcer l'affichage du bouton de fermeture:
...
open:function () {
$(".ui-dialog-titlebar-close").show();
}
...
Cela a fonctionné pour moi.
Voici une excellente réponse https://stackoverflow.com/a/31045175/3778527 Je suis testé avec:
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/blitzer/jquery-ui.css" />
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" />
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css" />
<script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script type="text/javascript" src="//code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
Juste lier le CSS a fonctionné pour moi. Il a peut-être été complètement absent de mon projet:
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
Vous devez ajouter des guillemets autour du "ok". C'est le texte du bouton. En l'état, le texte du bouton est actuellement vide (et donc non affiché) car il tente de résoudre la valeur de cette variable.
Les boîtes de dialogue modales ne sont pas destinées à être fermées autrement qu'en appuyant sur les boutons [ok] ou [annuler]. Si vous voulez le [x] dans le coin droit, définissez modal: false ou supprimez-le complètement.
J'ai eu un problème similaire. J'ai été à l'aide de jquery et jquery ui. Lorsque j'ai mis à jour mes versions, l'image de la boîte de dialogue de fermeture n'est plus apparue. Mon problème était que lorsque j'ai décompressé le paquet js que j'ai téléchargé, les répertoires n'avaient pas l'autorisation d'exécution.
Donc, un chmod rapide +X dir-name, et aussi pour les sous-dossiers, a fait l'affaire. Sans l'autorisation d'exécution sous linux, apache ne peut pas entrer dans le dossier.