it-swarm.com.ru

Заставьте JQuery UI Dialog автоматически увеличиваться или уменьшаться в соответствии с его содержимым

У меня есть всплывающее диалоговое окно JQuery UI, которое отображает форму. При выборе определенных параметров в форме новые параметры появятся в форме, что приведет к ее росту. Это может привести к сценарию, в котором главная страница имеет полосу прокрутки, а диалоговое окно JQuery UI имеет полосу прокрутки. Этот сценарий с двумя полосами прокрутки неприглядный и запутанный для пользователя.

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

125
MikeN

Обновление: Начиная с 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

136
cgp

Ответ заключается в том, чтобы установить

autoResize:true 

свойство при создании диалога. Для того, чтобы это работало, вы не можете установить любую высоту для диалога. Так что если вы установите фиксированную высоту в пикселях для диалога в его методе создателя или с помощью любого стиля, свойство autoResize не будет работать.

45
MikeN

Это работает с jQuery UI v1.10.3

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

Я использовал следующее свойство, которое отлично работает для меня:

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

Высота поддерживается на авто.

Ширина не!

Чтобы сделать что-то автоматическое, получите размер отображаемого 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
The Demz
var w = $('#dialogText').text().length;

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

сделал то, что мне нужно было сделать для изменения ширины диалога.

1
user596393

Если вам нужно, чтобы он работал в 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
Vladimir Kornea