[javascript] jQuery UI 대화 상자를 ajax 가로 드 한 내용의 너비로 자동 크기 조정

특정 정보와 이에 대한 예제를 찾는 데 많은 어려움을 겪고 있습니다. 내 응용 프로그램에 .ajax () 호출로로드 된 div에 연결된 많은 jQuery UI 대화 상자가 있습니다. 그들은 모두 동일한 설정 호출을 사용합니다.

 $(".mydialog").dialog({
        autoOpen: false,
        resizable: false,
        modal: true
 });

대화 상자가로드되는 내용의 너비로 크기를 조정하고 싶습니다. 현재 너비는 300px (기본값)이며 가로 스크롤 막대가 나타납니다.

내가 말할 수있는 한, “autoResize”는 더 이상 대화 상자의 옵션이 아니며, 지정할 때 아무 일도 일어나지 않습니다.

각 대화 상자마다 별도의 함수를 작성하려고하지 않으므로 .dialog("option", "width", "500")각 대화 상자의 너비가 다르므로 실제로는 옵션이 아닙니다.

width: 'auto'대화 상자 옵션을 지정 하면 대화 상자가 브라우저 창의 너비의 100 %를 차지합니다.

내 옵션은 무엇입니까? jQuery 1.4.1을 jQuery UI 1.8rc1과 함께 사용하고 있습니다. 이것은 정말 쉬운 것 같습니다.

편집 : 나는 이것에 대한 해결 방법을 구현했지만 더 나은 해결책을 찾고 있습니다.



답변

방금 JQuery 1.4.1 및 UI 1.8rc1을 사용하여 작은 샘플 앱을 작성했습니다. 내가 한 것은 생성자를 다음과 같이 지정하는 것입니다.

var theDialog = $(".mydialog").dialog({
        autoOpen: false,
        resizable: false,
        modal: true,
        width:'auto'
});

나는 이것이 브라우저 창의 너비를 100 % 차지한다고 말했지만 FF3.6, Chrome 및 IE8에서 테스트를 거쳤습니다.

AJAX 호출을하지 않고 대화 상자의 HTML을 수동으로 변경하기 만하지 만 이것이 문제를 일으킬 것이라고 생각하지 않습니다. 다른 CSS 설정으로 인해이 문제가 발생할 수 있습니까?

이것의 유일한 문제는 너비를 중앙에서 벗어나게하지만 문제를 해결하기 위해 setTimeout에 명령문 을 배치하는 해결 방법을 제공하는 이 지원 티켓을 찾았습니다 dialog('open').

내 head 태그의 내용은 다음과 같습니다.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript" src="jquery-ui.min.js"></script>
<link href="jquery-ui.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
    $(function(){
        var theDialog = $(".mydialog").dialog({
            autoOpen: false,
            resizable: false,
            modal: true,
            width: 'auto'
        });

        $('#one').click(function(){
            theDialog.html('some random text').dialog('open');
        });

        $('#two').click(function(){
            theDialog.html('<ul><li>Apple</li><li>Orange</li><li>Banana</li><li>Strawberry</li><li>long text string to see if width changes</li></ul>').dialog('open');
        });

        $('#three').click(function(){
            //this is only call where off-centre is noticeable so use setTimeout
            theDialog.html('<img src="./random.gif" width="500px" height="500px" />');
            setTimeout(function(){ theDialog.dialog('open') }, 100);;
        });
     });
</script>

http://jquery-ui.googlecode.com/files/jquery-ui-1.8rc1.zip 에서 Jquery UI 용 js 및 css를 다운로드했습니다 . 그리고 몸 :

<div class='mydialog'></div>
<a href='#' id='one'>test1</a>
<a href='#' id='two'>test2</a>
<a href='#' id='three'>test3</a>


답변

동일한 문제가 있었고 실제 문제가 CSS와 관련이 있다고 언급 한 덕분에 문제를 발견했습니다.

갖는 position:relative대신 position:absolute당신의 .ui-dialogCSS 규칙은 대화를하게하고 width:'auto'이상하게 동작합니다.

.ui-dialog { position: absolute;}


답변

내가 한 방법은 다음과 같습니다.

반응 형 jQuery UI 대화 상자 및 maxWidth 버그 수정

maxWidth & width : auto bug 수정.


답변

대화 상자에 float : left를 설정하는 것이 좋습니다. 아마도 대화 상자는 플러그인에 의해 절대적으로 배치됩니다.이 경우 위치는 이것에 의해 결정되지만 float의 부작용은 내용을 보유 해야하는만큼 요소를 넓게 만듭니다-여전히 효과가 있습니다.

다음과 같은 규칙을 설정하면 작동합니다.

.myDialog {float:left}

스타일 시트에서 jQuery를 사용하여 설정해야 할 수도 있습니다.


답변

해당 테마를 업그레이드하지 않고 jquery UI를 1.8.1로 업그레이드 할 때 동일한 문제가 발생했습니다. 테마도 업그레이드하는 데만 필요하며 “자동”이 다시 작동합니다.


답변

어떤 이유로 IE7 에서이 전체 페이지 너비 문제가 계속 발생 하여이 해킹을 만들었습니다.

var tag = $("<div></div>");
//IE7 workaround
var w;
if (navigator.appVersion.indexOf("MSIE 7.") != -1)
    w = 400;
else
    w = "auto";

tag.html('My message').dialog({
    width: w,
    maxWidth: 600,
    ...


답변

최대 너비를 지정하여 100 % 너비 문제를 피할 수 있습니다. maxWidth옵션이 작동하지 않는 것; max-width대신 대화 상자 위젯 에서 CSS 특성을 설정하십시오 .

최대 높이를 제한하려는 경우 maxHeight옵션을 사용하십시오 . 필요할 때 스크롤 막대가 올바르게 표시됩니다.

$(function() {
  var $dialog = $("#dialog");
  $dialog.dialog({
    autoOpen: false,
    modal: true,
    width: "auto"
  });
  /*
   * max-width should be set on dialog widget because maxWidth option has known issues
   * max-height should be set using maxHeight option
   */
  $dialog.dialog("widget").css("max-width", $(window).width() - 100);
  $dialog.dialog("option", "maxHeight", $(window).height() - 100);
  $(".test-link").on("click", function(e) {
    e.preventDefault();
    $dialog.html($(this.hash).html());
    // if you change the content of dialog after it is created then reset the left
    // coordinate otherwise content only grows up to the right edge of screen
    $dialog.dialog("widget").css({ left: 0 });
    $dialog.dialog("open");
  });
});
@import url("https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.min.css");
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>

<div id="dialog"></div>

<!-- test links -->

<p>
  <a href="#content-1" class="test-link">Image (Landscape)</a>
  <a href="#content-2" class="test-link">Image (Portrait)</a>
  <a href="#content-3" class="test-link">Text Content (Small)</a>
  <a href="#content-4" class="test-link">Text Content (Large)</a>
</p>
<p>If you are viewing in Stack Snippets > Full page then reload the snippet so that window height is recalculated (Right click > Reload frame).</p>

<!-- sample content -->

<div id="content-1" style="display: none;">
  <img src="https://i.stack.imgur.com/5leq2.jpg" width="450" height="300">
</div>

<div id="content-2" style="display: none;">
  <img src="https://i.stack.imgur.com/9pVkn.jpg" width="300" height="400">
</div>

<div id="content-3" style="display: none;">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sodales eu urna sit amet fermentum. Morbi ornare, leo ut ornare volutpat, nibh diam mattis elit, eget porta sapien quam eu mi. Nullam sollicitudin, nibh non suscipit commodo, nisi metus bibendum urna, vitae congue nisl risus eu tellus. Praesent diam ligula, hendrerit eget bibendum quis, convallis eu erat. Aliquam scelerisque turpis augue, sit amet dictum urna hendrerit id. Vestibulum luctus dolor quis ex sodales, nec aliquet lacus elementum. Mauris sollicitudin dictum augue eget posuere. Suspendisse diam elit, scelerisque eu quam vel, tempus sodales metus. Morbi et vehicula elit. In sit amet bibendum mi.</p>
</div>

<div id="content-4" style="display: none;">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sodales eu urna sit amet fermentum. Morbi ornare, leo ut ornare volutpat, nibh diam mattis elit, eget porta sapien quam eu mi. Nullam sollicitudin, nibh non suscipit commodo, nisi metus bibendum urna, vitae congue nisl risus eu tellus. Praesent diam ligula, hendrerit eget bibendum quis, convallis eu erat. Aliquam scelerisque turpis augue, sit amet dictum urna hendrerit id. Vestibulum luctus dolor quis ex sodales, nec aliquet lacus elementum. Mauris sollicitudin dictum augue eget posuere. Suspendisse diam elit, scelerisque eu quam vel, tempus sodales metus. Morbi et vehicula elit. In sit amet bibendum mi.</p>
  <p>Aenean eu magna tempor, pellentesque arcu eget, mattis enim. Cras at volutpat mi. Aenean id placerat felis, quis imperdiet nunc. Aenean a iaculis est, quis lacinia nisl. Sed aliquet sem eget justo convallis congue. Quisque rhoncus nulla sit amet cursus maximus. Phasellus nec auctor urna. Nam mattis felis et diam finibus consectetur. Etiam finibus dignissim vestibulum. In eu urna mattis dui pharetra iaculis. Nam eleifend odio et massa imperdiet, et hendrerit mauris tempor. Quisque sapien lorem, dapibus ut ultricies ut, hendrerit in nulla. Nunc lobortis mi libero, nec tincidunt lacus pretium at. Aliquam erat volutpat.</p>
  <p>Fusce eleifend enim nec massa porttitor tempor a eget neque. Quisque vel augue ac urna posuere iaculis. Morbi pharetra augue ac interdum pulvinar. Duis vel posuere risus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Ut vitae lectus non nisl iaculis volutpat nec vitae ante. Maecenas quis condimentum elit. Sed nisl urna, convallis ut pellentesque sit amet, pellentesque eget quam. Pellentesque ornare sapien ac scelerisque pretium. Pellentesque metus tortor, accumsan in vehicula iaculis, efficitur eget nisi. Donec tincidunt, felis vel viverra convallis, lectus lectus elementum magna, faucibus viverra risus nulla in dolor.</p>
  <p>Duis tristique sapien ut commodo laoreet. In vel sapien dui. Vestibulum non bibendum erat. Etiam iaculis vehicula accumsan. Phasellus finibus, elit et molestie luctus, massa arcu tempor nulla, id hendrerit metus mauris non mi. Morbi a ultricies magna. Proin condimentum suscipit urna eu maximus. Mauris condimentum massa ac egestas fermentum. Praesent faucibus a neque a molestie. Integer sed diam at eros accumsan convallis.</p>
</div>