免费的 jqGrid - "empty" 和 "not empty" 的自定义过滤规则

Free jqGrid - A custom filter rule for "empty" and "not empty"

我熟悉可以添加到每个列筛选器左侧的下拉选择中的自定义操作。

我想要的是添加两种新的自定义运算符来进行过滤: 1.空的 2.不为空

虽然我知道如何实现这一点,但我对 Free JqGrid 中此类流程的用户体验有疑问。这是因为这两个自定义运算符在选择后不需要用户的任何输入,因此用户在选择具有空值的运算符后必须单击 'enter' - 非常混乱。

我想知道的是如何实现以下考虑我已经定义了一个新的自定义运算符:

  1. 一旦我选择了这个运算符就开始交易,无需等待用户输入任何内容或点击回车(类似于 onSelect)。
  2. 可选择地,在选择特定运算符后,禁用在该特定过滤器中键入任何内容的能力。

谢谢,

总计

感谢您指出定义自定义一元操作的问题。我承诺 the changes of the code of free jqGrid 允许在新选项 customUnaryOperations 中指定自定义一元操作。

The demo定义了两个自定义过滤操作:"em"("is empty")和"nm"("isn't empty")并使用[=32=中的操作] 和 "Notes" 列。 "Notes" 列还使用标准(预定义)"nu" ("is null") 和 "nn" ("is not null") 操作。 "amount" 列使用

searchoptions: {sopt: ["eq", "ne", "em", "nm"]}

并且列 "note" 使用

searchoptions: {sopt: ["cn", "bw", "ew", "eq", "bn", "nc", "en", "nu", "nn", "em", "nm"]}

另外,该演示使用 customSortOperations 和新的 customUnaryOperations:

customUnaryOperations: ["em", "nm"],
customSortOperations: {
    em: {
        operand: "=''",
        text: "is empty",
        filter: function (options) {
            var v = options.item[options.cmName];
            if (v === undefined || v === "") {
                return true;
            }
        }
    },
    nm: {
        operand: "!=''",
        text: "isn't empty",
        filter: function (options) {
            var v = options.item[options.cmName];
            if (v !== undefined && v !== "") {
                return true;
            }
        }
    }
}