Faire grandir ou réduire automatiquement la boîte de dialogue JQuery UI pour s'adapter à son contenu


131

J'ai une fenêtre de dialogue d'interface utilisateur JQuery qui affiche un formulaire. En sélectionnant certaines options sur le formulaire, de nouvelles options apparaîtront dans le formulaire, le faisant grossir. Cela peut conduire à un scénario dans lequel la page principale a une barre de défilement et la boîte de dialogue JQuery UI a une barre de défilement. Ce scénario à deux barres de défilement est inesthétique et déroutant pour l'utilisateur.

Comment puis-je faire grandir la boîte de dialogue de l'interface utilisateur JQuery (et éventuellement la réduire) pour qu'elle s'adapte toujours à son contenu sans afficher de barre de défilement? Je préférerais que seule une barre de défilement sur la page principale soit visible.


1
Je suggère de poster un échantillon du code, il est difficile de recommander une solution sans voir la structure de la boîte de dialogue.
Diego

Réponses:


139

Mise à jour: à partir de jQuery UI 1.8, la solution de travail (comme mentionné dans le deuxième commentaire) consiste à utiliser:

width: 'auto'

Utilisez l'option autoResize: true. Je vais illustrer:

  <div id="whatup">
    <div id="inside">Hi there.</div>
  </div>
   <script>
     $('#whatup').dialog(
      "resize", "auto"
     );
     $('#whatup').dialog();
     setTimeout(function() {
        $('#inside').append("Hello!<br>");
        setTimeout(arguments.callee, 1000);
      }, 1000);
   </script>

Voici un exemple de travail: http://jsbin.com/ubowa


Hmm ... devra étendre mon FrameDialog ... c'est essentiellement une méthode qui crée un contenu iframed à utiliser avec dialog ... ce n'est pas parfait, mais fonctionne bien pour un projet pour lequel j'en avais besoin.
Tracker1

20
Cela n'a pas fonctionné pour moi. Au lieu de cela, j'ai défini l'option "largeur" ​​sur "auto".
Sam

+1 au commentaire - cela a fonctionné pour moi, et l'exemple fonctionne aussi, donc je dois imaginer que cela n'a pas changé, mais bon, si tout le reste échoue, essayez-le.
cgp

Cela ne fonctionne pas pour la largeur, cela ne fonctionne que pour la hauteur, je pense.
Walt W

18
Cette réponse n'est plus valable pour la version 1.8.4 à la place, utilisez height auto forum.jquery.com/topic/dialog-auto-width
Jeff

48

La réponse est de définir le

autoResize:true 

propriété lors de la création de la boîte de dialogue. Pour que cela fonctionne, vous ne pouvez pas définir de hauteur pour la boîte de dialogue. Ainsi, si vous définissez une hauteur fixe en pixels pour la boîte de dialogue dans sa méthode de création ou via n'importe quel style, la propriété autoResize ne fonctionnera pas.


9
Fantastique :) mais pourquoi jQuery n'a pas mis cela dans leur documentation?!. En tout cas merci.
Wahid Bitar

attention, ne fonctionne pas avec le positionnement par plugin de déclenchement (at, my, off etc)
Jeffz

26

Cela fonctionne avec jQuery UI v1.10.3

$("selector").dialog({height:'auto', width:'auto'});

A travaillé pour moi aussi (v1.11.1).
Jay Cummins

11

J'ai utilisé la propriété suivante qui fonctionne bien pour moi:

$('#selector').dialog({
     minHeight: 'auto'
});

2

La hauteur est prise en charge sur auto.

La largeur n'est pas!

Pour faire une sorte d'auto, obtenez la taille du div que vous affichez, puis définissez la fenêtre avec.

Dans le code C #.

TheDiv.Style["width"] = "200px";

    private void setWindowSize(int width, int height)
    {
        string widthScript =    "$('.dialogDiv').dialog('option', 'width', "    +   width   +");";
        string heightScript =   "$('.dialogDiv').dialog('option', 'height', "   +   height  + ");";

        ScriptManager.RegisterStartupScript(this.Page, this.GetType(),
            "scriptDOWINDOWSIZE",
            "<script type='text/javascript'>"
            + widthScript
            + heightScript +
            "</script>", false);
    }

2

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():

'open': function(){ $(this).dialog('option', 'width', this.scrollWidth) }

L'inclusion .scrollWidthdu 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: 0parmi 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.


1
var w = $('#dialogText').text().length;

$("#dialog").dialog('option', 'width', (w * 10));

fait ce dont j'avais besoin pour redimensionner la largeur de la boîte de dialogue.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.