1

我为我的一列配置了 requiredFieldValidator,它对现有行按预期工作。当我通过 Tab 或单击开始编辑新行时,验证器在移出该列时不会触发。当移出新行(列中没有数据)以便提交,然后移回该行时,现在验证器可以工作......但只有当我在编辑器中放入一些数据,然后删除它时。

换句话说,对于新行,requiredFieldValidator 不会做任何事情,直到我在列中实际键入内容。如果我将一列留空,它将永远不会触发,从而违背了它的目的。有趣的是,他们提供的示例(http://mleibman.github.com/SlickGrid/examples/example3-editing.html)也存在同样的问题。

4

4 回答 4

1

这将检查两个值是否为“”。我相信这应该返回 true,因为验证器可能是“必需的”验证器。

 this.isValueChanged = function () {
  // this needs to validate if both are empty since a validator might be a "required" validator
  if ($input.val() == "" && defaultValue == "")
    return true;
  else 
    return (!($input.val() == "" && defaultValue == "")) && ($input.val() != defaultValue);
};

首选方法是创建一个自定义编辑器,这样您就不会使用核心库。

于 2013-08-08T19:47:07.753 回答
0

我同意,我自己也遇到过这种行为。这是解决方案。

将 this.isValueChanged 函数内容更改为以下内容。

if(($input.val().length > 0) && ($input.val() != defaultValue))
            return true;
    else if(($input.val() == defaultValue)&&($input.val().length > 0))
            return true;
    else if(($input.val().length == 0) && ((undefined === defaultValue )||(defaultValue == "")))
            return true;
    else
            return false;

由于某种原因,在第一次交互期间未设置 defaultValue,我猜如果将其初始化为“”,则无需检查未定义。

无论如何,defaultValue 保存单元格的先前值,因此当它为空并且它是正在编辑的第一个单元格时,它是未定义的,之后对于所有其他空单元格,它被设置为“”。

问题是这个函数需要告诉网格值已经改变,以便单元格编辑器验证输入。在提供的实现中,表达式总是返回 false,因为

$input.val() == "" evaluates to true and then the expression 
!($input.val() == "" && defaultValue == null)) evaluates to false

这意味着 defaultValue 是连续未定义的。

希望这是有道理的,我的代码可以帮助你。

于 2012-12-17T05:27:44.643 回答
0

Roman的第一个else if有错误,返回false。否则,即使值未更改,单元格中的任何更改都会返回 true。我试过这个并且它有效。

this.isValueChanged = function () {
        var attuale = $input.val();
        if((attuale.length > 0) && (attuale != defaultValue))
            return true;
        else if((attuale == defaultValue)&&(attuale.length > 0))
            return false;
        else if((attuale.length == 0) && ((undefined === defaultValue )||(defaultValue == "")))
            return true;
        else
            return false;
};
于 2013-02-10T08:14:16.920 回答
0

有同样的问题,我相信理想情况下 defaultValue 应该设置为 undefined 或 null,当它没有被初始化时。所以我通过以下方式修改了 TextEditor:

function TextEditor(args) {
    var $input;
    var defaultValue;
    var scope = this;

    this.loadValue = function (item) {
        defaultValue = item[args.column.field] || null;
        $input.val(defaultValue);
        $input[0].defaultValue = defaultValue;
        $input.select();
    };

    this.isValueChanged = function () {
        return $input.val() != defaultValue;
    };

    ....

将默认 defaultValue 设置为 null 并简化 isValueChanged。

于 2013-02-01T14:02:39.603 回答