2017-01-03 47 views
1

我熟悉可以将bd添加到每个列过滤器左侧下拉选择中的自定义操作。免费jqGrid - “空”和“非空”的自定义过滤器规则

后我是什么,是添加了两个新类型的运营商定制的过滤: 1.空 2.不空

虽然我知道如何做到这一点本身,我有一个问题Free JqGrid中的这种流的UX。这是因为这两个自定义运算符在用户选择后不需要用户输入,所以用户在选择一个空值的运算符后必须点击'enter' - 非常容易混淆。

我想知道的是如何才达到以下考虑我已经定义了一个新的运营商定制:

  1. 创建事务去一次我选择了这个操作,而无需等待用户输入任何东西,或点击进入(类似onSelect)。
  2. (可选)禁用在选定特定运算符后在该特定筛选器内键入任何内容的功能。

感谢,

塔尔。

回答

2

感谢您指点定义问题的定制一元操作。我承诺代码free jqGridthe changes允许指定新选项customUnaryOperations内部的自定义一元运算。

The demo定义了两个自定义筛选操作:“em”(“为空”)和“nm”(“不为空”)并使用“Amount”和“Notes”列中的操作。 “注释”列另外使用标准(预定义)“nu”(“is null”)和“nn”(“非空”)操作。列 “金额” 使用

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

和列 “注” 使用

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; 
      } 
     } 
    } 
} 
+0

嗨奥列格,该X在正确的在使用Unary操作时不能使用该列。我想这是因为没有重置的价值,所以用户不会因为点击X而得到任何反应。退出这种模式的唯一方法是选择一个不同的操作,然后点击X. – Tal

+0

@Tal:我认为你是对的。如果当前操作是一元操作,则在点击“X”时将搜索操作重置为默认搜索操作(searchoptions.sopt [0]或o.defaultSearch)会很有帮助。我将在免费jqGrid的代码中进行更改,并会通知您刷新您的免费jqGrid。我现在必须做一些其他的事情,但我稍后会发布你的评论。 – Oleg

+0

@Tal:我向GitHub提交了[相应更改](https://github.com/free-jqgrid/jqGrid/commit/a6e0aa1b8d83a77155c6e10c1e5758c22a238be9)。请重新载入您使用的免费jqGrid,并立即测试“X”的行为。顺便说一下[演示](http://www.ok-soft-gmbh.com/jqGrid/OK/formEditOnDoubleClick-jqueryui-fa3-customUnaryOperations.htm)从GitHub加载jqGrid,因此您可以使用它来表达对我做了最新的变化。 – Oleg