JQuery UI Dialogをその内容に合わせて自動的に拡大または縮小する


131

フォームを表示するJQuery UIダイアログポップアップがあります。フォームで特定のオプションを選択すると、新しいオプションがフォームに表示され、高さが大きくなります。これにより、メインページにスクロールバーがあり、JQuery UIダイアログにスクロールバーがあるシナリオが発生する可能性があります。この2つのスクロールバーのシナリオは、ユーザーにとって見苦しく混乱します。

スクロールバーを表示せずにJQuery UIダイアログを拡大して(場合によっては縮小して)常にコンテンツに合わせるにはどうすればよいですか?メインページのスクロールバーだけが表示されるようにしたいと思います。


1
コードのサンプルを投稿することをお勧めします。ダイアログの構造を確認せずにソリューションを推奨することは困難です。
ディエゴ

回答:


139

更新: jQuery UI 1.8以降では、(2番目のコメントで言及されている)作業ソリューションは次のものを使用することです。

width: 'auto'

autoResize:trueオプションを使用します。説明します:

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

これが実際の例です:http : //jsbin.com/ubowa


うーん..FrameDialogを拡張する必要があります...それは本質的にダイアログで使用するためのiframeされたコンテンツを作成するメソッドです。それは完璧ではありませんが、私が必要とするプロジェクトではうまく機能しています。
Tracker1 2009

20
これは私にはうまくいきませんでした。代わりに、オプション「幅」を「自動」に設定します。
Sam

コメントに+1-それは私にとってはうまくいき、例もうまくいくので、これは変更されていないと想像する必要がありますが、他のすべてが失敗した場合は、試してみてください。
cgp 2010

これは幅では機能しませんが、高さでのみ機能すると思います。
Walt W

18
この回答はバージョン1.8.4では無効です。代わりに、height auto forum.jquery.com/topic/dialog-auto-widthを
Jeff

48

答えは設定することです

autoResize:true 

ダイアログを作成するときのプロパティ。これが機能するためには、ダイアログの高さを設定できません。そのため、作成者メソッドまたは任意のスタイルを介してダイアログの固定高さをピクセル単位で設定した場合、autoResizeプロパティは機能しません。


9
素晴らしい:)しかし、なぜjQueryはそれをドキュメントに記載しなかったのですか?とにかくuに感謝します。
Wahid Bitar

注意、トリガープラグイン(at、my、offなど)による配置では機能しません
Jeffz


11

私はうまく機能する次のプロパティを使用しました:

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

2

高さは自動でサポートされています。

幅はありません!

ある種の自動を行うには、表示しているdivのサイズを取得し、ウィンドウを設定します。

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

IE7で動作させる必要がある場合は、文書化されて おらず、バグがあり、サポートされていない{'width':'auto'}オプションを使用できません。代わりに、以下をに追加してください.dialog()

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

.scrollWidth右側のパディングを含めるかどうかはブラウザに依存するため(FirefoxはChromeとは異なります)、主観的な「十分な」ピクセル数を追加して、.scrollWidth、独自の幅計算関数で置き換えることができます。

あなたはあなたのwidth: 0中に含めたいかもしれません.dialog()この方法では幅が減ることはなく、幅を増やすだけなのでオプション。

IE7、IE8、IE9、IE10、IE11、Firefox 30、Chrome 35、およびOpera 22で動作することがテストされています。


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

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

ダイアログの幅を変更するために必要なことを行いました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.