首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >slickgrid中的新行,验证器不会触发

slickgrid中的新行,验证器不会触发
EN

Stack Overflow用户
提问于 2012-08-13 23:17:08
回答 4查看 1.5K关注 0票数 1

我已经为我的一列配置了requiredFieldValidator,它对现有行的工作与预期一样。当我按tab键浏览或单击开始编辑新行时,当移出列时验证器不会触发。当移出新行(列中没有数据),使其提交,然后移回该行时,现在验证器works...but仅当我在编辑器中放入一些数据,然后删除它。

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

EN

回答 4

Stack Overflow用户

发布于 2013-08-09 03:47:08

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

代码语言:javascript
复制
 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
EN

Stack Overflow用户

发布于 2012-12-17 13:27:45

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

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

代码语言:javascript
复制
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,因为

代码语言:javascript
复制
$input.val() == "" evaluates to true and then the expression 
!($input.val() == "" && defaultValue == null)) evaluates to false

这意味着defaultValue一直是未定义的。

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

票数 0
EN

Stack Overflow用户

发布于 2013-02-01 22:02:40

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11937271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档