我为其中一个列配置了requiredFieldValidator,它可以按现有行的预期工作。当我通过Tab键或单击开始编辑新行时,验证器在离开列时不会触发。当离开新行(列中没有数据)以便提交,然后返回到行时,现在验证器工作......但是,只有在编辑器中放入一些数据,然后将其删除。
换句话说,对于新行,requiredFieldValidator在我实际在列中输入内容之前不会执行任何操作。如果我把一个列留空,它永远不会发射,从而无法实现它的目的。有趣的是,他们提供的示例(http://mleibman.github.com/SlickGrid/examples/example3-editing.html)也存在同样的问题。
答案 0 :(得分: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);
};
首选方法是创建自定义编辑器,这样您就不会破坏核心库。
答案 1 :(得分: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,我猜你是否将它初始化为“”,你不需要检查undefined。
无论如何,defaultValue保存单元格的前一个值,因此当它为空且它是第一个正在编辑的单元格时,它是未定义的,之后对所有其他空单元格设置为“”。
问题是这个函数需要告诉网格值已经改变,以便单元格编辑器验证输入。在提供的实现中,表达式始终返回false,因为
$input.val() == "" evaluates to true and then the expression
!($input.val() == "" && defaultValue == null)) evaluates to false
这意味着defaultValue是未定义的。
希望有意义,我的代码会帮助你。
答案 2 :(得分: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;
};
....
将default defaultValue设置为null并简化isValueChanged。
答案 3 :(得分:0)
如果是罗马的第一个其他错误,则返回为假。否则,即使值未更改,单元格中的任何更改都将返回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;
};