2015-07-23 11 views
7

Widziałem dziwne zachowanie jQuery UIDialog i nie jestem w stanie zrozumieć:jQuery UI Dialog na zmianę rozmiaru kurczy treści Dialog

  1. Jaki problem jest? lub
  2. Co ja tu robię źle? lub
  3. Czy to znany błąd?

Kroki następnie powtórzyć tę kwestię:

  1. otworzyć okno jQuery UI klikając Nowy/więcej przycisków.
  2. Następnie spróbuj zmienić rozmiar okna w pionie.
  3. Pojawi się nieprawidłowość, że szerokość zawartości okna dialogowego zmniejsza się automatycznie, co powoduje pojawienie się paska przewijania w oknie dialogowym.

EDIT: widzę, że jeśli usunąć twitter bootstrap ze strony wtedy nadal pojawia się problem, ale nie ma wiele zauważalne. niezależnie od tego, z jakiego powodu nie mogę usunąć twitter bootstrap z mojej strony, ponieważ jest on używany we wszystkich innych miejscach mojego obecnego projektu.

Przed zmianą rozmiaru

Before re-sizing

Po ponownym wielkości

After re-sizing vertically the width shrinks automatically

Oto mój kod jQuery. Proszę sprawdzić JSFiddle here:

$(document).on("click", "#btnNew", function() { 
    $("#popOutNewFolder").dialog({ 
     show: "blind", 
     hide: "blind", 
     modal: true 
    }); 
}); 

$(document).on("click", "#btnMore", function() { 
    $("#popOutMoreFolder").dialog({ 
     show: "blind", 
     hide: "blind", 
     modal: true 
    }); 
}); 
+0

ten błąd będzie w najnowszej wersji jQuery UI 1.12.1 i pomyślałbym, że by to poprawił już teraz? po ponad 2 latach zgaduję kilka, ale czego nie dostaję, to wiem, że od tego czasu zmienili dialog, więc ... czy czegoś brakuje? – Seabizkit

Odpowiedz

4

zrobiłem kilka badań i okazało się, że jest to znany błąd (jQuery UI zespół wie o bug). I mają kilka Biletów przypisanych do tego błędu. Jeśli chcesz śledzić ich śledzenia błędów następnie spojrzeć tutaj:

  1. Ticket #8506
  2. Ticket #9832
  3. Ticket #10069

znalazłem obejście dopóki nie (jQuery UI Team) znajdź rozwiązanie tego błędu.
Oto działa JSFiddle link.
Obejście polega na użyciu zdarzenia o nazwie resizeStop podczas inicjowania okna dialogowego.Więc kod wyglądałby następująco:

$(document).on("click", "#btnNew", function() { 
    $("#popOutNewFolder").dialog({ 
     show: "blind", 
     hide: "blind", 
     modal: true, 
     resizeStop: myResize 
    }); 
}); 

$(document).on("click", "#btnMore", function() { 
    $("#popOutMoreFolder").dialog({ 
     show: "blind", 
     hide: "blind", 
     modal: true, 
     resizeStop: myResize 
    }); 
}); 

function myResize(event, ui) { 
    $(this).height($(this).parent().height() - $(this).prev('.ui-dialog-titlebar').height() - 34); 
    $(this).width($(this).prev('.ui-dialog-titlebar').width() + 2); 
} 
0

To css pracował dla mnie:

.ui-dialog .ui-dialog-content { 
    width: 100% !important; 
} 
2

oparciu off roztworu Khurram, ten jest bardziej niezawodny, ponieważ nie używać magii liczb, ale zamiast rachunki na paddings.

Wybrałem również to wydarzenie na resize wydarzenie zamiast resizeStop, ponieważ wtedy nie przeskakuje w tę iz powrotem. Updated JSFiddle

resize: function() { 
    var heightPadding = parseInt($(this).css('padding-top'), 10) + parseInt($(this).css('padding-bottom'), 10), 
    widthPadding = parseInt($(this).css('padding-left'), 10) + parseInt($(this).css('padding-right'), 10), 
    titlebarMargin = parseInt($(this).prev('.ui-dialog-titlebar').css('margin-bottom'), 10); 
    $(this).height($(this).parent().height() - $(this).prev('.ui-dialog-titlebar').outerHeight(true) - heightPadding - titlebarMargin); 

    $(this).width($(this).prev('.ui-dialog-titlebar').outerWidth(true) - widthPadding); 
}, 
0

używam następujących składników, które jest wynikiem tymczasowej roztworu z # 10069 i to widać zmniejszenie lub usunięcie domyślnego duży wyściółkę może powodować ten problem.

.ui-dialog .ui-dialog-content { 
    /* Fix resizing issue where content doesn't fit in the dialog anymore */ 
    padding: 3.5px; 
} 

.ui-dialog .ui-dialog-titlebar { 
    /* Adjust the titlebar so it is equal to the content fix */ 
    margin: 3.5px; 
}