JqGridの幅を100%に設定することは可能ですか?列幅は絶対ピクセルサイズでなければならないことを理解していますが、実際のグリッドの幅を相対的なサイズに設定するための何かをまだ見つけていません。たとえば、幅を100%に設定します。 100%の代わりに、450pxの奇数サイズを使用するようです。ページにはより水平なスペースがありますが、列の幅などにより、コンテナ(グリッドのみの)が水平にスクロールします。これを回避する方法はありますか?
最終的に jqGrids.fluid拡張 を使用してこれを行い、うまく機能しました。
[〜#〜] update [〜#〜]:そのリンクは死んでいるようですが、アーカイブされた記事は見ることができます ここ 。
autowidth: true
3.5以降
わたしにはできる:
width: null,
shrinkToFit: false,
これを使用して、グリッドの幅を親コンテナーの幅に設定します。
function resizeGrid() {
var $grid = $("#list"),
newWidth = $grid.closest(".ui-jqgrid").parent().width();
$grid.jqGrid("setGridWidth", newWidth, true);
}
ここで説明した関数に関してjqGridの幅を修正しようとすることができます jQueryUIダイアログ内のjqGridでsetGridWidthを正しく呼び出す
幅を「null」に設定してみてください。わたしにはできる。
$(grid).jqGrid({
width: null,
});
ここで見つけたこのための素晴らしい機能(stackoverflow)は投稿を思い出すことができません。私は高さの部分をコメントアウトしていますが、それを覚えておいてください(私にとってはうまくいきませんでした)が、幅は完璧です。これをPHPファイルのどこかに投げてください。
$resize = <<<RESIZE
jQuery(window).resize(function(){
gridId = "grid";
gridParentWidth = $('#gbox_' + gridId).parent().width();
$('#' + gridId).jqGrid('setGridWidth',gridParentWidth);
// $('#' + gridId).jqGrid('setGridHeight', //Math.min(500,parseInt(jQuery(".ui-jqgrid-btable").css('height'))));
})
RESIZE;
これはサポートされていないようです。 setGridWidth のドキュメントによると:
グリッドに新しい幅を動的に設定します。パラメーターは次のとおりです。new_widthは新しい ピクセル単位の幅...
width
オプションのドキュメントでは、幅をパーセンテージで設定できることについても言及していません。
そうは言っても、autowidth
機能または同様の手法を使用して、グリッドに正しい初期幅を与えることができます。次に、 resize-jqgrid-when-browser-is-resized で説明されているメソッドに従って、ブラウザウィンドウのサイズが変更されたときにグリッドが適切にサイズ変更されていることを確認します。
よりシンプル
$("#gridId").setGridWidth($(window).width() );
loadComplete : function () {
$("#gridId").jqGrid('setGridWidth', $(window).width(), true);
},
幅をパーセントで指定することはできませんが、画面の解像度に応じて必要な場合は、次のように設定します:var w = screen.width
そして、jqgridの幅オプションでこの変数を使用します。
役に立てば幸いです。
私はこれを行い、魅力のように働いています。
$(document).ready(function () { $("#jQGridDemo").setGridWidth(window.innerWidth - offset); });
50のオフセットを入れました
JohnJohnの答え 、 Bhargavの答え 、および Molsonの答え の3つすべての答えの組み合わせのみが、本物の達成に役立つことに気づきました自動サイズ変更。
そのため、すべてを活用するコードを作成しました。以下のスニペットを参照してください。また、単一のグリッドオブジェクトまたはサイズ変更するグリッドの配列を渡すことができるように改善しました。
試してみる場合は
ウィンドウのサイズを変更し、グリッドのサイズがどのように変化し、自動的に再配置されるかを確認します。
// see: https://free-jqgrid.github.io/getting-started/
// CDN used: https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid
$(function() {
// pass one single grid, or an array of grids
function resizeGrid(jqGridObj) {
var $gridArray = Array.isArray(jqGridObj) ? jqGridObj : [jqGridObj];
for(let i=0; i<$gridArray.length; i++) {
var $grid=$gridArray[i],
newWidth = $grid.closest(".ui-jqgrid").parent().width();
$grid.jqGrid("setGridWidth", newWidth, true);
}
};
// template for the 2 grids
function createGrid(gridName, gridData) {
var gridObj=$("#"+gridName); gridObj.jqGrid({
autowidth: true, height: 45,
colNames: ['First name', 'Last name', 'Updated?'],
colModel: [{name: "firstName"}, {name: "lastName"}, {name: "updated"}],
data: gridData,
loadComplete: function() {
// resize on load
resizeGrid(gridObj);
}
});
return gridObj;
}
// instantiate Grid1
var data1 = [
{ id: 10, firstName: "Jane", lastName: "Doe", updated: "no"},
{ id: 20, firstName: "Justin", lastName: "Time", updated: "no" }
];
var gridObj1=createGrid("grid1", data1);
// instantiate Grid2
var data2 = [
{ id: 10, firstName: "Jane", lastName: "Smith", updated: "no"},
{ id: 20, firstName: "Obi-Wan", lastName: "Kenobi", updated: "no" }
];
var gridObj2=createGrid("grid2", data2);
function debounce(fn, delay) {
delay || (delay = 200);
var timer = null;
return function () {
var context = this, args = arguments;
clearTimeout(timer);
timer = setTimeout(function () {
fn.apply(context, args);
}, delay);
};
}
function throttle(fn, threshhold, scope) {
threshhold || (threshhold = 200);
var last,
deferTimer;
return function () {
var context = scope || this;
var now = +new Date,
args = arguments;
if (last && now < last + threshhold) {
// hold on to it
clearTimeout(deferTimer);
deferTimer = setTimeout(function () {
last = now;
fn.apply(context, args);
}, threshhold);
} else {
last = now;
fn.apply(context, args);
}
};
}
// change size with window for both grids
jQuery(window).resize(throttle(function(){
resizeGrid([gridObj1, gridObj2]);
}));
});
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
<title>Resizing jqGrid example</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/themes/redmond/jquery-ui.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.15.2/css/ui.jqgrid.min.css"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.15.2/jquery.jqgrid.min.js"></script>
<table id="grid1"></table>
<br/>
<table id="grid2"></table>
注:この例は単純ですが、より複雑なjqGridがある場合は、スロットルまたはデバウンス(2つの関数throttle
およびdebounce
はそこから取得されます)、そうでない場合、サイズ変更イベントは本当に遅くなる可能性があります。リンクをクリックして詳細をご覧ください。この場合は、より滑らかに見えるので調整することを好みますが、コードで必要に応じて使用できるように両方の関数を含めました。
実際のコードでは、調整が必要でした。そうしないと、サイズ変更が非常に遅くなりました。コードスニペットには、デフォルトのしきい値が200ミリ秒のスロットルハンドラーが既に含まれています。たとえば、コードスニペットでthrottle
をdebounce
に置き換えた場合、それを試すことができます。
jQuery(window).resize(debounce(function(){
resizeGrid([gridObj1, gridObj2]);
}));
これを試して、
置換width: 1100
toautowidth: true,