J'ai beaucoup de mal à trouver des informations et des exemples spécifiques à ce sujet. J'ai un certain nombre de boîtes de dialogue d'interface utilisateur jQuery dans mon application attachées à des div qui sont chargés d'appels .ajax (). Ils utilisent tous le même appel de configuration:
$(".mydialog").dialog({
autoOpen: false,
resizable: false,
modal: true
});
Je veux juste que la boîte de dialogue soit redimensionnée à la largeur du contenu qui est chargé. À l'heure actuelle, la largeur reste juste à 300px (la valeur par défaut) et j'obtiens une barre de défilement horizontale.
Pour autant que je sache, "autoResize" n'est plus une option pour les dialogues, et rien ne se passe lorsque je le spécifie.
J'essaie de ne pas écrire une fonction distincte pour chaque boîte de dialogue, ce .dialog("option", "width", "500")
n'est donc pas vraiment une option, car chaque boîte de dialogue aura une largeur différente.
La spécification width: 'auto'
des options de dialogue fait simplement que les boîtes de dialogue occupent 100% de la largeur de la fenêtre du navigateur.
Quelles sont mes options? J'utilise jQuery 1.4.1 avec jQuery UI 1.8rc1. Il semble que cela devrait être quelque chose de vraiment facile.
EDIT: J'ai mis en œuvre une solution de contournement kludgy pour cela, mais je suis toujours à la recherche d'une meilleure solution.
{'width':'auto'}
ne fonctionne pas dans IE7 et ne sera pas corrigé car l'{'width':'auto'}
option n'est pas prise en charge par jQuery-UI selon scott.gonzalez: "Les dialogues ne prennent pas en charge la largeur automatique. La documentation indique que l'option n'accepte qu'un nombre, qui sera utilisé pour une taille de pixel. Consultez le fil de discussion jquery-ui-dev pour savoir pourquoi nous ne prenons pas en charge la largeur automatique. "J'ai eu le même problème et grâce à vous avoir mentionné que le vrai problème était lié au CSS, j'ai trouvé le problème:
Avoir
position:relative
au lieu deposition:absolute
dans votre.ui-dialog
règle CSS rend le dialogue etwidth:'auto'
se comporte étrangement.la source
Voici comment je l'ai fait:
Dialogue d'interface utilisateur jQuery réactif (et un correctif pour le bogue maxWidth)
Correction du bug maxWidth & width: auto.
la source
J'imagine que le réglage float: left pour la boîte de dialogue fonctionnera. Vraisemblablement, la boîte de dialogue est positionnée de manière absolue par le plugin, auquel cas sa position sera déterminée par cela, mais l'effet secondaire de float - rendre les éléments aussi larges que nécessaire pour contenir du contenu - prendra toujours effet.
Cela devrait fonctionner si vous mettez simplement une règle comme
dans votre feuille de style, mais vous devrez peut-être le définir à l'aide de jQuery
la source
J'ai eu le même problème lorsque j'ai mis à niveau l'interface utilisateur de jquery vers la version 1.8.1 sans mettre à niveau le thème correspondant. Seul est nécessaire pour mettre à jour le thème aussi et "auto" fonctionne à nouveau.
la source
Pour une raison quelconque, j'ai continué à avoir ce problème de largeur de page avec IE7, alors j'ai fait ce hack:
la source
Vous pouvez éviter le problème de largeur de 100% en spécifiant une largeur maximale. L'
maxWidth
option ne semble pas fonctionner; alors définissez lamax-width
propriété CSS sur le widget de dialogue à la place.Si vous souhaitez également contraindre la hauteur maximale, utilisez l'
maxHeight
option. Il affichera correctement une barre de défilement si nécessaire.la source
J'avais un problème similaire.
Réglage
width
de"auto"
bien fonctionné pour moi , mais quand la boîte de dialogue contenait beaucoup de texte , il fait enjamber la largeur de la page, en ignorant lemaxWidth
réglage.Réglage
maxWidth
surcreate
fonctionne bien si:la source
J'ai eu ce problème aussi.
Je l'ai fait fonctionner avec ceci:
la source
Tout ce que vous avez à faire est simplement d'ajouter:
la source
J'ai le même problème et avoir la position: absolue dans votre .ui-dialog {} css ne suffisait pas. J'ai remarqué que la position: relative était définie sur le style direct de l'élément réel, donc la définition css .ui-dialog était en train d'être écrasée. Position de réglage: absolue sur le div J'allais faire un dialogue statiquement ne fonctionnait pas non plus.
En fin de compte, j'ai changé deux placés dans mon jQuery local pour que cela fonctionne.
J'ai changé la ligne suivante dans jQuery pour être:
à https://github.com/jquery/jquery/blob/1.8.0/src/offset.js#L62
De plus, comme ma boîte de dialogue était configurée pour être déplaçable, j'ai dû modifier cette ligne également dans jQuery-ui pour qu'elle soit:
à https://github.com/jquery/jquery-ui/blob/1-8-stable/ui/jquery.ui.draggable.js#L48
Peut-être que passer en revue le style que j'ai plus en profondeur réglerait les choses, mais j'ai pensé partager comment j'ai fait fonctionner cela.
la source
Si vous en avez besoin pour fonctionner dans IE7, vous ne pouvez pas utiliser l' option non documentée, boguée et non prise en charge
{'width':'auto'}
. Au lieu de cela, ajoutez ce qui suit à votre.dialog()
:L'inclusion ou
.scrollWidth
non du remplissage du côté droit dépend du navigateur (Firefox diffère de Chrome), vous pouvez donc soit ajouter un nombre de pixels subjectif "assez bon".scrollWidth
, soit le remplacer par votre propre fonction de calcul de largeur.Vous voudrez peut-être inclure
width: 0
parmi vos.dialog()
options, car cette méthode ne diminuera jamais la largeur, augmentez seulement la.Testé pour fonctionner dans IE7, IE8, IE9, IE10, IE11, Firefox 30, Chrome 35 et Opera 22.
la source
modifier ce soufflet:
la source