Mam okno dialogowe interfejsu użytkownika JQuery, które wyświetla formularz. Wybierając określone opcje w formularzu, pojawią się nowe opcje w formularzu, powodując jego wzrost. Może to prowadzić do scenariusza, w którym strona główna ma pasek przewijania, a okno dialogowe interfejsu użytkownika JQuery ma pasek przewijania. Ten scenariusz z dwoma paskami przewijania jest brzydki i mylący dla użytkownika.
Jak mogę sprawić, by okno dialogowe interfejsu użytkownika JQuery rosło (i prawdopodobnie zmniejszało się), aby zawsze pasowało do jego zawartości bez wyświetlania paska przewijania? Wolałbym, aby widoczny był tylko pasek przewijania na stronie głównej.
Odpowiedzi:
Aktualizacja: Począwszy od jQuery UI 1.8, działającym rozwiązaniem (jak wspomniano w drugim komentarzu) jest użycie:
width: 'auto'
Użyj opcji autoResize: true. Zilustruję:
<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>
Oto działający przykład: http://jsbin.com/ubowa
źródło
Odpowiedzią jest ustawienie
autoResize:true
właściwość podczas tworzenia okna dialogowego. Aby to zadziałało, nie możesz ustawić żadnej wysokości dla okna dialogowego. Więc jeśli ustawisz stałą wysokość w pikselach dla okna dialogowego w jego metodzie twórcy lub za pomocą dowolnego stylu, właściwość autoResize nie będzie działać.
źródło
Działa to z interfejsem użytkownika jQuery v1.10.3
$("selector").dialog({height:'auto', width:'auto'});
źródło
Użyłem następującej właściwości, która działa dobrze dla mnie:
$('#selector').dialog({ minHeight: 'auto' });
źródło
Wysokość jest obsługiwana automatycznie.
Szerokość nie jest!
Aby wykonać jakieś auto, pobierz rozmiar wyświetlanego elementu div, a następnie ustaw okno za pomocą.
W kodzie 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); }
źródło
Jeśli chcesz, aby działał w IE7, nie możesz użyć opcji nieudokumentowanej, błędnej i nieobsługiwanej
{'width':'auto'}
. Zamiast tego dodaj do swojego.dialog()
:'open': function(){ $(this).dialog('option', 'width', this.scrollWidth) }
To, czy
.scrollWidth
zawiera wypełnienie po prawej stronie, zależy od przeglądarki (Firefox różni się od Chrome), więc możesz dodać subiektywną „wystarczająco dobrą” liczbę pikseli do.scrollWidth
lub zastąpić ją własną funkcją obliczania szerokości.Możesz chcieć uwzględnić je
width: 0
wśród swoich.dialog()
opcji, ponieważ ta metoda nigdy nie zmniejszy szerokości, a jedynie ją zwiększy.Przetestowano do pracy w IE7, IE8, IE9, IE10, IE11, Firefox 30, Chrome 35 i Opera 22.
źródło
var w = $('#dialogText').text().length; $("#dialog").dialog('option', 'width', (w * 10));
zrobiłem to, czego potrzebowałem, aby zmienić szerokość okna dialogowego.
źródło