【问题标题】:How can I get the selected search filter in onCellSelect in free jqGrid?如何在免费 jqGrid 中的 onCellSelect 中获取选定的搜索过滤器?
【发布时间】:2016-07-26 23:53:22
【问题描述】:

我有一个网格,当用户突出显示他们想要过滤的文本时,我在其中提供搜索。

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"]}

mcmncustomSortOperations 的一部分。

现在我想要的是当用户在网格内的特定单元格中选择一些文本时,我想检测使用了哪个搜索过滤器。例如,默认搜索过滤器是cn

我试过这个:

$("a.soptclass[data-colname='"+selectionColumn+"']").attr('data-soper')

但它每次都给我默认的cn

我可以在链接中获取文本,它会给我一个符号名称,例如 ~ 代表 cn== 代表 eq

$("a.soptclass[data-colname='"+selectionColumn+"']").text()

但是,有没有一种 jqgrid 方法可以选择准确的搜索运算符?即cn,eq,ne,le

如果需要工作演示,请告诉我,我会更新问题。

更新: DEMO.

在第 659 行和第 660 行,我正在使用此回调 $("a.soptclass[data-colname='"+selectionColumn+"']").text()

换句话说,我希望在onCellSelect 中选择搜索运算符

【问题讨论】:

  • 我不确定我是否理解正确。在哪个回调中,您尝试使用 $("a.soptclass[data-colname='"+selectionColumn+"']").text() 之类的表达式?你能用测试用例准备一些演示吗?如果我能完全理解您想要实现的内容,我会为您提供帮助。
  • @Oleg 我准备了一个演示here。有时间请看一下。

标签: javascript jquery jqgrid free-jqgrid


【解决方案1】:

我仍然不完全了解您想要实现的确切行为,但您似乎可以使用以下代码开始 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 行为(未指定 filterToolbaridMode 选项)。元素$elem 是过滤器工具栏中的<input><select> 元素。您可以使用$elem(selection) 更改该值。 oper 变量包含当前选择的搜索操作。应该使用.data("soper") 而不是.attr("data-soper") 来访问数据。

我希望这是你目前所缺少的。

【讨论】:

  • 你好@Oleg,这正是我想要的。这种要求的目的是我希望能够为他们提供对正在发生的文本选择的搜索。但是我想实现一个多重不包含过滤器。因此,用户必须能够首先选择过滤器,然后选择他们想要排除的字符串。所以为了做到这一点,我需要检测选择了哪种过滤器。这非常有效。再次感谢您。
  • @DipenShah:不客气!您可以尝试将选择与鼠标右键单击相结合,这会从列允许的搜索操作中创建上下文菜单,并在用户在上下文菜单中做出选择后强制搜索。您可以考虑在不单击鼠标右键(选择后直接)的情况下显示相同的上下文菜单。用户会看到选中的单词,可以直接选择搜索操作。
  • 感谢您的建议,但这将使用户点击 2 次而不是当前发生的一次。大多数情况下,用户会做一个普通的包含过滤器,只需单击一下即可完成。但是,如果我提供一个上下文菜单或类似的东西,会在它上面再添加一次我不想要的点击。
  • @DipenShah:好的,我现在明白了。这听起来像是非常有用的功能!
  • 好的,谢谢。目标是让用户的操作更快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多