Зробіть діалогове вікно інтерфейсу JQuery автоматично зростати або зменшуватися, щоб відповідати його вмісту


131

У мене з'являється діалогове вікно діалогу інтерфейсу JQuery, яке відображає форму. Вибравши певні параметри форми, у формі з’являться нові параметри, які змушують її зростати. Це може призвести до сценарію, коли на головній сторінці є смуга прокрутки, а у діалоговому вікні інтерфейсу JQuery є смуга прокрутки. Цей сценарій з двома прокрутками непривабливий і заплутаний для користувача.

Як я можу змусити діалогове вікно інтерфейсу JQuery зростати (і, можливо, скорочуватися), щоб завжди відповідати його вмісту, не показуючи смугу прокрутки? Я вважаю за краще, щоб на головній сторінці було видно лише смугу прокрутки.


1
Я б запропонував опублікувати зразок коду, важко рекомендувати рішення, не бачачи структури діалогового вікна.
Дієго

Відповіді:


139

Оновлення: Станом на jQuery UI 1.8, робочим рішенням (як зазначено у другому коментарі) є використання:

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 ... це, по суті, метод, який створює iframed вміст для використання з діалогом .. він не ідеальний, але добре працює для проекту, який мені потрібен.
Tracker1

20
Це не спрацювало для мене. Замість цього я встановив опцію "ширина" на "авто".
Сем

+1 до коментаря - це працювало для мене, і приклад працює також, тому я маю уявити, що це не змінилося, але ей, якщо все інше не вдасться, дайте йому постріл.
cgp

Це не працює для ширини, але це працює лише на висоту, я думаю.
Walt W

18
Ця відповідь більше не діє для версії 1.8.4, замість цього використовуйте auto auto forum.jquery.com/topic/dialog-auto-width
Джефф

48

Відповідь - встановити

autoResize:true 

властивість при створенні діалогового вікна. Для цього ви не можете встановити будь-яку висоту діалогового вікна. Отже, якщо ви встановите фіксовану висоту в пікселях для діалогового вікна в його методі створення або в будь-якому стилі, властивість autoResize не буде працювати.


9
Фантастично :) але чому jQuery не помітив цього у своїй документації ?! У будь-якому випадку дякую u.
Вахід Бітар

обережно, не працює з позиціонуванням за допомогою тригерного плагіна (у, моєму, вимкненому тощо)
Jeffz


11

Я використав наступне властивість, яке добре працює для мене:

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

2

Висота підтримується автоматично.

Ширина ні!

Щоб зробити якесь автоматичне отримання розміру діва, який ви показуєте, а потім встановіть вікно.

У коді 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));

зробив те, що мені потрібно для зміни розміру ширини діалогового вікна.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.