ブラウザウィンドウのサイズが変更されたときにjqGridのサイズを変更する方法はありますか?ここで説明する方法を試しましたが、その手法はIE7では機能しません。
回答:
これを本番環境でしばらくの間、文句なしに使用しています(たとえば、サイドバーの幅を差し引くなど、サイトを正しく表示するために微調整が必要な場合があります)
$(window).bind('resize', function() {
$("#jqgrid").setGridWidth($(window).width());
}).trigger('resize');
フォローアップとして:
この投稿に示されている以前のコードは、信頼性が低いため、最終的には破棄されました。jqGridのドキュメントで推奨されているように、現在、次のAPI関数を使用してグリッドのサイズを変更しています。
jQuery("#targetGrid").setGridWidth(width);
実際のサイズ変更を行うために、次のロジックを実装する関数がウィンドウのサイズ変更イベントにバインドされます。
親のclientWidthと(使用できない場合は)offsetWidth属性を使用して、グリッドの幅を計算します。
サニティチェックを実行して、幅がxピクセルを超えて変更されていることを確認します(アプリケーション固有の問題を回避するため)
最後に、setGridWidth()を使用してグリッドの幅を変更します
サイズ変更を処理するためのサンプルコードは次のとおりです。
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>
自動サイズ変更:
jQgrid3.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);
});
}
}
$(this).setGridWidth(gridParentWidth, true);
これは私にとってうまく機能しているようです
$(window).bind('resize', function() {
jQuery("#grid").setGridWidth($('#parentDiv').width()-30, true);
}).trigger('resize');
レイアウトに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"
}
});
//以下に定義されている他のグリッド...
リンクのコードから借りて、次のようなことを試すことができます。
$(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%の幅に設定されている場合、コンテナが拡張すると自動的に拡張するはずですが、使用しているプラグインに複雑な点がない限り、私にはわかりません。
主な答えは私にとってはうまくいきましたが、IEでアプリが非常に応答しなくなったので、提案されたようにタイマーを使用しました。コードは次のようになります($(#contentColumn)
JQGridが配置されているdivです)。
function resizeGrids() {
var reportObjectsGrid = $("#ReportObjectsGrid");
reportObjectsGrid.setGridWidth($("#contentColumn").width());
};
var resizeTimer;
$(window).bind('resize', function () {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(resizeGrids, 60);
});
こんにちはスタックオーバーフロー愛好家。私はほとんどの回答を楽しんだし、いくつかの賛成票を投じたが、なんらかの奇妙な理由でIE 8でうまく機能しなかった...しかし、これらのリンクに遭遇した...この男は作業。jquery UIに加えて、プロジェクトにそれを含め、テーブルの名前とdivをスローします。
http://stevenharman.net/blog/archive/2009/08/21/creating-a-fluid-jquery-jqgrid.aspx
autowidth: true
私のために完璧に働いた。ここから学んだ。
autowidth
グリッドが最初にロードされたときは正常に機能しますが、ブラウザーのサイズが変更されたときにグリッドのサイズは変更されません。その問題にどのように対処しましたか、それともそれはあなたの要件ではありませんか?