Есть ли способ изменить размер jqGrid при изменении размера окна браузера? Я пробовал описанный метод here, но этот метод не работает в IE7.Изменение размера jqGrid при изменении размера браузера?
ответ
В последующих:
предыдущий код, показанный на этом посту был в конечном итоге отказались, потому что она была ненадежной. Я теперь с помощью следующей функции API, чтобы изменить размер сетки, как это рекомендовано в документации jqGrid:
jQuery("#targetGrid").setGridWidth(width);
Чтобы сделать фактическое изменение размера, функция реализации следующей логики связано с событием изменения размера окна:
Рассчитайте ширину сетки с помощью clientWidth своего родителя и (если это невозможно) ее атрибут offsetWidth.
Выполните проверку вменяемости, чтобы убедиться, что ширина изменилась более чем х пикселей (для работы вокруг некоторых конкретных прикладных задач)
Наконец, используйте setGridWidth() для изменения ширины GRID в
Вот пример кода для обработки изменения размера:
jQuery(window).bind('resize', function() {
// Get width of parent container
var width = jQuery(targetContainer).attr('clientWidth');
if (width == null || width < 1){
// For IE, revert to offsetWidth if necessary
width = jQuery(targetContainer).attr('offsetWidth');
}
width = width - 2; // Fudge factor to prevent horizontal scrollbars
if (width > 0 &&
// Only resize if new width exceeds a minimal threshold
// Fixes IE issue with in-place resizing when mousing-over frame bars
Math.abs(width - jQuery(targetGrid).width()) > 5)
{
jQuery(targetGrid).setGridWidth(width);
}
}).trigger('resize');
И пример разметки:
<div id="grid_container">
<table id="grid"></table>
<div id="grid_pgr"></div>
</div>
Заимствование из кода в вашей ссылке, вы можете попробовать что-то вроде этого:
$(window).bind('resize', function() {
// resize the datagrid to fit the page properly:
$('div.subject').children('div').each(function() {
$(this).width('auto');
$(this).find('table').width('100%');
});
});
Таким образом, вы связываете непосредственно к событию window.onresize, который на самом деле выглядит как то, что вы хотите от вашего вопроса.
Если ваша сетка установлена на 100% ширину, хотя она должна автоматически расширяться, когда ее контейнер расширяется, если только не используются некоторые тонкости плагина, который вы используете, о котором я не знаю.
Спасибо за отзыв! Оказывается, я вызывал код изменения размера из события GridComplete - по какой-то причине это не работает в IE. Во всяком случае, я извлек код изменения размера в отдельную функцию и вызываю его как в функции изменения размера, так и после создания сетки. Еще раз спасибо! –
Это не работает при изменении размера окна в IE 8. Это происходит, когда вы обновляете страницу. – SoftwareSavant
Авторазмер:
Для jQgrid 3.5+
if (grid = $('.ui-jqgrid-btable:visible')) {
grid.each(function(index) {
gridId = $(this).attr('id');
gridParentWidth = $('#gbox_' + gridId).parent().width();
$('#' + gridId).setGridWidth(gridParentWidth);
});
}
Для jQgrid 3.4.x:
if (typeof $('table.scroll').setGridWidth == 'function') {
$('table.scroll').setGridWidth(100, true); //reset when grid is wider than container (div)
if (gridObj) {
} else {
$('#contentBox_content .grid_bdiv:reallyvisible').each(function(index) {
grid = $(this).children('table.scroll');
gridParentWidth = $(this).parent().width() – origami.grid.gridFromRight;
grid.setGridWidth(gridParentWidth, true);
});
}
}
+1 блестящее решение. – Peymankh
Ну, я могу подтвердить, что версия 3.5+ выше отлично работает с jqGrid 4.4.1 на IE9, но с FireFox 16 и 17, таблица постоянно увеличивается немного каждый раз, когда я настраиваю ширину браузера. – MattSlay
Возможно, у вас проблемы с границами, определенными в css - я сделал. – jmav
использовали это в производстве в течение некоторого времени без каких-либо жалоб (Возможно, вы немного подберете, чтобы посмотреть прямо на своем сайте .. например, вычитая ширину боковой панели и т. Д.)
$(window).bind('resize', function() {
$("#jqgrid").setGridWidth($(window).width());
}).trigger('resize');
Также очень полезно в этой ситуации: Второй параметр setGridWidth - это сокращение. http://stackoverflow.com/questions/7745009/in-jqgrid-is-it-possible-to-resize-columns-to-fit-the-table-width-original-wid – Jim
Стивен, вы видели решение jmav? Это кажется лучшим, но я хотел посмотреть, как вы сравнили его с таким подходом. – IcedDante
это, кажется, работает хорошо для меня
$(window).bind('resize', function() {
jQuery("#grid").setGridWidth($('#parentDiv').width()-30, true);
}).trigger('resize');
Спасибо за решение, но оно не работает должным образом, как будто он меняет весь div, но не применяется для заголовка. :( –
Почему есть -30 в вашем примере? –
Я не уверен. Это было 5 лет назад :( –
Я использую 960.gs для макета, так что мое решение выглядит следующим образом:
$(window).bind(
'resize',
function() {
// Grid ids we are using
$("#demogr, #allergygr, #problemsgr, #diagnosesgr, #medicalhisgr").setGridWidth(
$(".grid_5").width());
$("#clinteamgr, #procedgr").setGridWidth(
$(".grid_10").width());
}).trigger('resize');
// Here we set a global options
jQuery.extend(jQuery.jgrid.defaults, {
// altRows:true,
autowidth : true,
beforeSelectRow : function(rowid, e) { // disable row highlighting onclick
return false;
},
datatype : "jsonstring",
datastr : grdata, // JSON object generated by another function
gridview : false,
height : '100%',
hoverrows : false,
loadonce : true,
sortable : false,
jsonReader : {
repeatitems : false
}
});
// Demographics Grid
$("#demogr").jqGrid({
caption : "Demographics",
colNames : [ 'Info', 'Data' ],
colModel : [ {
name : 'Info',
width : "30%",
sortable : false,
jsonmap : 'ITEM'
}, {
name : 'Description',
width : "70%",
sortable : false,
jsonmap : 'DESCRIPTION'
} ],
jsonReader : {
root : "DEMOGRAPHICS",
id : "DEMOID"
}
});
// Другие сетки определены ниже. ..
Прекрасный материал .... –
Спасибо Fergal. –
Отличное решение, спасибо! –
autowidth: true
отлично работал для меня. из here.
'autowidth' отлично работает при первой загрузке сетки, но не будет изменять размер сетки при изменении размера браузера. Как вы справлялись с этой проблемой, или это вам не обязательно? –
@ Justin Ethier: you're Я хотел, чтобы он устанавливал, когда сетка загружается в первый раз, а не когда изменяется размер браузера. Извините, я неправильно понял вопрос. Я понимаю, что проголосовало. – understack
Главный ответ сработал для меня, но сделал приложение крайне невосприимчивым к IE, поэтому я использовал таймер, как было предложено. Код выглядит примерно так ($(#contentColumn)
является ДИВ, что JQGrid сидит):
function resizeGrids() {
var reportObjectsGrid = $("#ReportObjectsGrid");
reportObjectsGrid.setGridWidth($("#contentColumn").width());
};
var resizeTimer;
$(window).bind('resize', function() {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(resizeGrids, 60);
});
Кажется, было бы сложно сделать таймер работать правильно. посмотрите мой обновленный ответ и посмотрите, нужен ли вам таймер? –
Просто сравните все 3 из них. безусловно, является улучшением по сравнению с решением Стивенса, но изменение размера окна все еще довольно рывкое. С таймером изменение размера будет плавным до тех пор, пока событие не загорится, поэтому потребуется немного времени, чтобы получить правильную синхронизацию. Таймер немного неуклюжий, но я думаю, что он дает лучшие результаты в конце. – woggles
edit: Stephens sln отлично работает на другой странице моей ... эта страница только начала бороться, как только я добавил к ней несколько других элементов управления jQueryUI. – woggles
Привет Stack энтузиастов переполнения. Мне понравилось большинство ответов, и я даже проголосовал за пару, но ни один из них не работал для меня в IE 8 по какой-то странной причине ... Я все же столкнулся с этими ссылками ... Этот парень написал библиотеку, которая, кажется, Работа. Включите его в свои проекты в adittion для jquery UI, введите имя вашей таблицы и div.
http://stevenharman.net/blog/archive/2009/08/21/creating-a-fluid-jquery-jqgrid.aspx
Я также получаю странное поведение в IE8 с представлением совместимости и без него:/Моя сетка имеет размер до половины размера, который он должен be ... спасибо за ссылки – woggles
<script>
$(document).ready(function(){
$(window).on('resize', function() {
jQuery("#grid").setGridWidth($('#fill').width(), false);
jQuery("#grid").setGridHeight($('#fill').height(),true);
}).trigger('resize');
});
</script>
Это работает ..
var $targetGrid = $("#myGridId");
$(window).resize(function() {
var jqGridWrapperId = "#gbox_" + $targetGrid.attr('id') //here be dragons, this is generated by jqGrid.
$targetGrid.setGridWidth($(jqGridWrapperId).parent().width()); //perhaps add padding calculation here?
});
Попробуйте это:
width: null
shrinkToFit: true
Это только обрабатывает начальную загрузку сетки, а не изменение размера браузера. –
@ Justin Ethier на самом деле справляется с изменением размера совершенно точно – Mindless
Есть ли у вас демо, например jsfiddle, что onstrates он работает? –
Если вы:
- имеет
shrinkToFit: false
(средние столбцов с фиксированной шириной) - имеет
autowidth: true
- не заботятся о высоте жидкости
- имеет горизонтальную полосу прокрутки
Вы можете сделать сетку с шириной жидкости со следующими стилями :
.ui-jqgrid {
max-width: 100% !important;
width: auto !important;
}
.ui-jqgrid-view,
.ui-jqgrid-hdiv,
.ui-jqgrid-bdiv {
width: auto !important;
}
- 1. Изменение размера изображений при изменении размера браузера
- 2. изменить размер jqgrid при изменении размера браузера
- 3. Изменение веб-сайта при изменении размера браузера?
- 4. Ext.js: изменение размера панели при изменении браузера
- 5. Изменение размера изображения при вертикальном изменении размера окна браузера?
- 6. изменение размера сетки при изменении размера окна браузера
- 7. Изменение размера DataGrid при изменении размера браузера (не работает)?
- 8. Изменение размера аватара открытие и закрытие при изменении размера браузера
- 9. Изменение размера фонового видео при изменении размера браузера
- 10. Максимальное изменение размера в браузере при изменении размера браузера
- 11. Изменение размера элемента Unity WebPlayer при изменении размера браузера
- 12. Изменение размера шрифта при изменении размера браузера в Fraction Slider
- 13. Изменение размера фиксированной позиции CSS/HTML при изменении размера браузера
- 14. Изменение размера страницы при изменении размера окна
- 15. При изменении размера окна браузера
- 16. Изменение размера PictureBox при изменении размера формы
- 17. Изменение размера компонентов при изменении размера окна
- 18. Изменение размера компонентов при изменении размера формы
- 19. Изменение размера UICollectionView при изменении размера кадра
- 20. Изменение размера TextBox при изменении размера формы
- 21. Изменение размера шрифта при изменении размера div
- 22. Изменение размера шрифта при изменении размера окна
- 23. Изменение размера Jpanel при изменении размера JFrame
- 24. Уведомление об изменении размера браузера?
- 25. Обнаруживать при изменении размера браузера не работает
- 26. Изменение размера макета размера при изменении размера окна UWP
- 27. Изменение размера с помощью браузера
- 28. Изменение размеров заголовков при изменении размера окна
- 29. jQuery Цикл при изменении размера браузера
- 30. Изменение состояний представления при изменении размера приложения
Если вам нужно поддерживать IE, вам может потребоваться уменьшить частоту изменения размера с помощью таймеров. – fforw
Ухаживать за разработкой? У меня были проблемы с IE, когда событие изменения размера было вызвано без изменения ширины сетки, что привело к странному поведению в самой сетке. Вот почему код принимает во внимание порог на шаге 2. –
можете ли вы поделиться своим кодом, который вы использовали, пожалуйста? – leora