如何在免费的 jqGrid 中的 onCellSelect 中获取选定的搜索过滤器?
How can I get the selected search filter in onCellSelect in free jqGrid?
我有一个网格,当用户突出显示他们想要过滤的文本时,我会在其中提供搜索。
onCellSelect
看起来像这样:
onCellSelect: function(row, col, content, event) {
var cm = grid.jqGrid("getGridParam", "colModel");
if (window.getSelection) {
selection = window.getSelection();
} else if (document.selection) {
selection = document.selection.createRange();
}
selectionColumn = cm[col].name;
selection.toString() !== '' && $("#gs_"+selectionColumn).val(selection.toString());
console.log($("a.soptclass[data-colname='"+selectionColumn+"']").attr('data-soper'));
if(selection.toString() != '')
{
grid[0].triggerToolbar();
}
}
现在我有一些自定义的搜索运算符并在网格中使用它们:
searchoptions:{sopt:["cn",'mc','mn',"eq","ne","lt","le","gt","ge","bw","ew","nc"]}
mc
和 mn
是 customSortOperations
的一部分。
现在我想要的是当用户在网格内的特定单元格内选择一些文本时,我想检测使用了哪个搜索过滤器。例如,默认情况下搜索过滤器是 cn
.
我试过这个:
$("a.soptclass[data-colname='"+selectionColumn+"']").attr('data-soper')
但它每次都给我默认值 cn
。
我可以得到 link 中的文本,这将给我一个符号名称,例如 ~
代表 cn
,==
代表 eq
和
$("a.soptclass[data-colname='"+selectionColumn+"']").text()
然而,有没有一种 jqgrid 方法可以选择准确的搜索运算符?即 cn
、eq
、ne
、le
等
如果需要工作演示,请告诉我,我会更新问题。
更新: DEMO.
在 659 和 660 行我正在使用这个回调 $("a.soptclass[data-colname='"+selectionColumn+"']").text()
换句话说,我希望在 onCellSelect
中选择搜索运算符
我仍然不完全理解您想要实现的确切行为,但您似乎可以使用以下代码启动 onCellSelect
代码:
onCellSelect: function(row, col, content, event) {
var p = $(this).jqGrid("getGridParam");
var hDiv = p.frozenColumns === true && p.colModel[col].frozen === true ?
this.grid.fhDiv : this.grid.hDiv;
var $elem = $(hDiv).find("#gs_" + $.jgrid.jqID(p.id + "_" + p.colModel[col].name));
var oper = $elem.parent().prev().children("a").data("soper");
...
}
$elem
使用当前免费 jqGrid 实现的标准 id 行为(未指定 filterToolbar
的 idMode
选项)。元素 $elem
是过滤器工具栏中的 <input>
或 <select>
元素。您可以使用 $elem(selection)
更改值。 oper
变量包含当前选择的搜索操作。应该使用 .data("soper")
而不是 .attr("data-soper")
来访问数据。
我希望这是你目前所缺少的。
我有一个网格,当用户突出显示他们想要过滤的文本时,我会在其中提供搜索。
onCellSelect
看起来像这样:
onCellSelect: function(row, col, content, event) {
var cm = grid.jqGrid("getGridParam", "colModel");
if (window.getSelection) {
selection = window.getSelection();
} else if (document.selection) {
selection = document.selection.createRange();
}
selectionColumn = cm[col].name;
selection.toString() !== '' && $("#gs_"+selectionColumn).val(selection.toString());
console.log($("a.soptclass[data-colname='"+selectionColumn+"']").attr('data-soper'));
if(selection.toString() != '')
{
grid[0].triggerToolbar();
}
}
现在我有一些自定义的搜索运算符并在网格中使用它们:
searchoptions:{sopt:["cn",'mc','mn',"eq","ne","lt","le","gt","ge","bw","ew","nc"]}
mc
和 mn
是 customSortOperations
的一部分。
现在我想要的是当用户在网格内的特定单元格内选择一些文本时,我想检测使用了哪个搜索过滤器。例如,默认情况下搜索过滤器是 cn
.
我试过这个:
$("a.soptclass[data-colname='"+selectionColumn+"']").attr('data-soper')
但它每次都给我默认值 cn
。
我可以得到 link 中的文本,这将给我一个符号名称,例如 ~
代表 cn
,==
代表 eq
和
$("a.soptclass[data-colname='"+selectionColumn+"']").text()
然而,有没有一种 jqgrid 方法可以选择准确的搜索运算符?即 cn
、eq
、ne
、le
等
如果需要工作演示,请告诉我,我会更新问题。
更新: DEMO.
在 659 和 660 行我正在使用这个回调 $("a.soptclass[data-colname='"+selectionColumn+"']").text()
换句话说,我希望在 onCellSelect
我仍然不完全理解您想要实现的确切行为,但您似乎可以使用以下代码启动 onCellSelect
代码:
onCellSelect: function(row, col, content, event) {
var p = $(this).jqGrid("getGridParam");
var hDiv = p.frozenColumns === true && p.colModel[col].frozen === true ?
this.grid.fhDiv : this.grid.hDiv;
var $elem = $(hDiv).find("#gs_" + $.jgrid.jqID(p.id + "_" + p.colModel[col].name));
var oper = $elem.parent().prev().children("a").data("soper");
...
}
$elem
使用当前免费 jqGrid 实现的标准 id 行为(未指定 filterToolbar
的 idMode
选项)。元素 $elem
是过滤器工具栏中的 <input>
或 <select>
元素。您可以使用 $elem(selection)
更改值。 oper
变量包含当前选择的搜索操作。应该使用 .data("soper")
而不是 .attr("data-soper")
来访问数据。
我希望这是你目前所缺少的。