2013-08-26 2 views
1

У меня есть всплывающее окно Fancybox, которое использует AJAX для извлечения содержимого.Fancybox получает неправильный размер контента при использовании jQuery-Chosen?

Приобретенный html - это div, содержащий заголовок, таблицу с полями ввода и некоторые кнопки.

Проблема в том, что я получаю дополнительную обивку или слишком маленький размер; в любом случае у меня нет лишних полос прокрутки. Я могу полностью отключить их, используя CSS overflow или свойство scrolling Fancybox, но я не хочу, чтобы они были полностью отключены - добавляется только при необходимости.

Я использую JQuery Chosen Plugin, из-за чего происходит переполнение; как я могу избежать этого?

Содержимое div модифицировано клиентом, так как они могут динамически добавлять/удалять строки, поэтому мне нужно, чтобы полосы прокрутки отображались, если пользователь добавляет слишком много строк, чтобы они поместились на экране. Вот что происходит, до сих пор:

scrollbars

Что случилось с этим? Вот мой CSS для вещи:

#filter-form { 
    width: 550px; 
} 
#filter-form h2 { 
    text-align: center; 
} 
#filter-form .chzn-results { 
    max-height: 110px; 
} 
#filter-form .buttons { 
    margin-top: 10px; 
    overflow: hidden; 
} 
#filter-form .buttons .btn_save_filter { 
    float: right; 
} 
#assoc-num, #assoc-string { 
    display: none; 
} 

#filter-form #CustomUserFilters_title { 
    width: 350px; 
    display: block; 
    margin: 0 auto 30px; 
} 
#add-new-row td { 
    text-align: right; 
} 
#add-new-row button { 
    display: inline; 
} 
#filter-rules, #filter-form .buttons { 
    width: 500px; 
    margin: 0 auto; 
} 
#filter-rules td { 
    width: 25% !important; 
} 

Ширина настройки не имеет значения - удаление их или увеличивая их и до сих пор вызывают их - так это не FancyBox в авторазмер особенность, которая думает содержание меньше - это всегда изменяет только нужной суммы, минус некоторые пиксели, которые вызывают переполнение.

Вот HTML (большой беспорядок, я знаю):

<div id="filter-div"> 
<form action="/customUserFilters/create" id="filter-form"> 
<h2>Create Filter</h2> 
<input placeholder="Filter name" type="text" value="" name="CustomUserFilters[title]" id="CustomUserFilters_title"><table id="filter-rules"> 
    <tbody><tr class="filter-row"> 
<td class="td-bool-op"></td> 
<td class="td-field-id"><select id="" style="width: 150px;" name="CustomUserFilterSettings[][field_id]"> 
<option value="2">Name</option> 
</select></td> 
<td class="td-assoc"><select style="width: 100px;" name="CustomUserFilterSettings[][assoc]"> 
<option value="=">=</option> 
</select></td> 
<td class="td-value"><input type="text" value="" name="CustomUserFilterSettings[][value]" id="CustomUserFilterSettings_value"></td></tr> <tr id="new-filter"> 

<td class="td-bool-op"><select id="" style="width: 60px;" name="CustomUserFilterSettings[][bool_op]"> 
<option value="AND" selected="selected">AND</option> 
<option value="OR">OR</option> 
</select></td> 
<td class="td-field-id"><select id="" style="width: 150px;" name="CustomUserFilterSettings[][field_id]"> 
<option value="2">Name</option> 
</select></td> 
<td class="td-assoc"><select style="width: 100px;" name="CustomUserFilterSettings[][assoc]"> 
<option value="=">=</option> 
</select></td> 
<td class="td-value"><input type="text" value="" name="CustomUserFilterSettings[][value]" id="CustomUserFilterSettings_value"></td> </tr> 
    <tr id="add-new-row"> 
     <td colspan="4"> 
      <button id="add-new-row-button" class="btn_grey" name="yt0" type="button">+ Add Another Condition</button>  </td> 
    </tr> 
</tbody></table> 
<div class="buttons"> 
    <button class="btn_orange btn_save_filter" name="yt1" type="button">Create Filter</button> <button class="btn_grey btn_cancel_filter" name="yt2" type="button">← Cancel</button></div> 
</form> 

И вот FancyBox INIT:

$('#new_filter_button').fancybox({ 
    beforeLoad: function() { 
     $('.qtip').hide(); 
    }, 
    type: 'ajax', 
    href: window.baseUrl + '/customUserFilters/create', 
    openEffect: 'fade', 
    closeEffect: 'fade', 
    wrapCSS: 'filters-box' 
}); 

ответ

0

Ну, как выясняется, FancyBox скрывает перетекание содержание.

Так как я с помощью JQuery Избранного Плагин, даже когда ящики были закрыты, их контейнеры были еще на странице только скрытой - это вызвало ДИВ быть выше, чем это необходимо, но по какой-то причине FancyBox Бесполезной 't просто заставляет диалог быть больше, потому что выпадающее меню было скрыто, оно почему-то исключило его из-за высоты, хотя оно все еще занимало вертикальное пространство. Затем горизонтальная полоса прокрутки взяла ширину из диалогового окна и вызвала переполнение ширины, что и вызвало вертикальную полосу прокрутки.

Черт! Надеюсь, этот ответ поможет другим людям столкнуться с этой проблемой.

Смежные вопросы