このような要件を実装するには多くの方法があります。可能な解決策から 1 つを示す 2 つのデモを用意しました。最初のデモと次のデモです。ここで説明するのと同じ方法でハイライト jQuery プラグインを使用する最初のデモの拡張バージョンの 2 番目のデモ。
まず、グリッドの上部のツールバーにボタンのある入力ボックスを追加します。toolbar: [true, "top"]
グリッドの上部に空のツールバーを追加するために使用します。次に、次のコードを使用します
$('#t_' + $.jgrid.jqID($grid[0].id))
.append($("<div><label for=\"globalSearchText\">Global search in grid for: " +
"</label><input id=\"globalSearchText\" type=\"text\"></input> " +
"<button id=\"globalSearch\" type=\"button\">Search</button></div>"));
ツールバーを HTML フラグメントで埋める
<div>
<label for="globalSearchText">Global search in grid for: </label>
<input id="globalSearchText" type="text">
<button id="globalSearch" type="button">Search</button>
</div>
検索を開始するには、次の JavaScript コードを使用しました
$("#globalSearchText").keypress(function (e) {
var key = e.charCode || e.keyCode || 0;
if (key === $.ui.keyCode.ENTER) { // 13
$("#globalSearch").click();
}
});
$("#globalSearch").button({
icons: { primary: "ui-icon-search" },
text: false
}).click(function () {
var rules = [], i, cm, postData = $grid.jqGrid("getGridParam", "postData"),
colModel = $grid.jqGrid("getGridParam", "colModel"),
searchText = $("#globalSearchText").val(),
l = colModel.length;
for (i = 0; i < l; i++) {
cm = colModel[i];
if (cm.search !== false && (cm.stype === undefined || cm.stype === "text")) {
rules.push({
field: cm.name,
op: "cn",
data: searchText
});
}
}
postData.filters = JSON.stringify({
groupOp: "OR",
rules: rules
});
$grid.jqGrid("setGridParam", { search: true });
$grid.trigger("reloadGrid", [{page: 1, current: true}]);
return false;
});
は$grid
、検索を開始するグリッドです ( var $grid = $("#list");
)。
上部のツールバーの要素の可視性を少し改善するために、このような単純な追加の CSS を使用しました
.ui-jqgrid .ui-userdata { height: auto; }
.ui-jqgrid .ui-userdata div { margin: .1em .5em .2em;}
.ui-jqgrid .ui-userdata div>* { vertical-align: middle; }
結果は下の写真のようになります
2 番目のデモでは、ハイライト プラグインを使用してグリッドの可視性を改善し、検索されたフィールドが行のどこにあるかをユーザーがすぐに確認できるようにします。
検索フィルターの作成中に、search: false
プロパティ ("note"
列など) を持つ列と を持つ列をスキップしたことがわかりますstype: "select"
。"cn"
すべての列でフィルターを使用(含む) しました。