ExtJs NumberField 验证

Posted

技术标签:

【中文标题】ExtJs NumberField 验证【英文标题】:ExtJs NumberField Validation 【发布时间】:2011-07-14 20:42:31 【问题描述】:

我有一个像下面这样的复合元素


    xtype: 'compositefield'
    ,hideLabel: true
    ,labelWidth: 100
    ,items: [
        
            xtype: 'displayfield'
            ,width: 160
            ,value: 'field 1'
        ,
        
            xtype: 'checkbox',
            name: 'field1name',
            id: 'field1id',
            checked: true
        ,
        
            xtype: 'displayfield'
            ,width: 20
            ,value: 'Ft '
        ,
        
            xtype: 'numberfield',
            width: 50,
            allowNegative: false,
            value: 50,
            name: 'numberfield'     
        
    ]

如何对xtype:'numberField' 进行自定义验证?

我不想将配置选项 allowBlank:false 放在,而是想在其他地方验证它,但在字段的一侧显示一条错误消息。

谁能给我解释一下怎么做?

下面是我的做法,它在firebug中产生“无效方法”错误:

Ext.get('numberfield').setActiveError('this Field Cannot be Blank');

Ext.get('numberfield').markInvalid('this Field Cannot be Blank');

【问题讨论】:

如果你只想验证里面是否有值,你应该使用allowBlank: false。如果要自定义消息,只需要指定blankText: 'custom text'。对于真正的自定义验证,有 validator 配置。 【参考方案1】:

我认为最简单的方法是使用验证器功能:


    xtype: 'compositefield'
    ,hideLabel: true
    ,labelWidth: 100
    ,monitorValid: true
    ,items: [
        [...]
        
            xtype: 'numberfield',
            width: 50,
            allowNegative: false,
            value: 50,
            name: 'numberfield',
            validator: function(val) 
                if (!Ext.isEmpty(val)) 
                    return true;
                
                else 
                    return "Value cannot be empty";
                
            
        
    ]

【讨论】:

您能告诉我如何运行该验证器吗?谢谢。我想根据表单中其他一些字段的选择来验证这个字段。所以这个验证器会在我提交表单后立即运行。 不需要显式调用,在FormPanel配置中使用monitorValid: true会自动调用。 我编辑了答案,向您展示了您需要添加的地方。 ok 正如您在我的代码中看到的,我有一个复选框,如果选中该复选框,则数字字段不应为空,否则可以为空。我基本上希望根据复选框验证数字字段。谢谢... 哦,我明白了。然后尝试使用您的方法,但设置一个 id: 'my-number-field' 并在 Ext.get 中使用它。【参考方案2】:

在 Extjs4 中,您可以将属性 allowBlank 设置为 false 以防止出现空的数字字段条目。

还有一个minLength 设置来限制必须输入的字符数。

【讨论】:

以上是关于ExtJs NumberField 验证的主要内容,如果未能解决你的问题,请参考以下文章

Extjs 获取输入框焦点,并选中值

ExtJS 动态设置Grid列是否可编辑

带有 LabelAlign 顶部(中心)的 ExtJS 文本字段

禁用 ExtJS 数字字段中的特殊字符

具有多种 xtypes 的 ExtJS 5 网格小部件列

在 extjs 网格视图中显示文本框