2012-08-13 49 views
1

我为我的某个列配置了requiredFieldValidator,并且它对现有行的预期工作。当我通过选项卡时,或者单击开始编辑新行时,验证器在离开列时不会触发。当移出新行(列中没有数据)以便提交时,然后移回行时,现在验证程序正常工作......但是只有在编辑器中放入了一些数据,然后删除它时才行。slickgrid中的新行,验证器不会触发

换句话说,对于新行,requiredFieldValidator在我实际在列中输入内容之前不会执行任何操作。如果我留下一个空白栏它永远不会开火,击败它的目的。有趣的是,他们提供的示例(http://mleibman.github.com/SlickGrid/examples/example3-editing.html)显示了同样的问题。

回答

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; 

出于某种原因,默认值第一interraction期间未设置,如果你初始化我的猜测为“”你不会需要检查未定义。

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

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

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

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

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

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。

0

如果是Roman,在第一个else中有错误,则返回值为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; 
}; 
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); 
}; 

首选的方法是创建一个自定义编辑器,这样你就不会与核心库混在一起。