ExtJs表单验证

时间:2010-12-07 17:36:15

标签: javascript validation extjs

我在ExtJs中有这个表单。如果field1不为空,则field2不能为空。但即使听众正在解雇,它也无法正常工作。

 {
    xtype: 'panel',
    title: 'title 1',
    items: [{
        xtype: 'fieldset',
        title: 'field A',
        items: [{
            xtype: 'textfield',
            fieldLabel: 'Line 1',
            id: 'field1',
            listeners: {
                change: function(f, new_val) {
                    if (new_val) {
                        //alert("change" + new_val);
                        f.field2.allowBlank = false;
                    } else {
                        f.field1.allowBlank = true;
                    }
                }
            }
            code for field2
        }]
    }]
}

2 个答案:

答案 0 :(得分:5)

部分答案:

您的代码不起作用的原因是因为allowBlank是配置值 - 它仅在创建组件时有效。我一直看到这个错误 - 在浏览API文档时,您需要记住所有这些配置选项仅在创建对象时有效 - 它们不是可以设置为修改现有对象行为的公共属性

那就是说,我很惊讶API中没有setAllowBlank()方法。如果我能找到办法,我会继续环顾四周并修改这个答案。

编辑:通过阅读TextField源代码,您的方法应该工作。所以问题是为什么不是。

EDIT2 :您可能无法获得对TextFields的引用。 f.field1可能没有指出你的想法。您可以通过向TextField配置添加ref:'field1'来解决此问题。然后你的FormPanel将有一个名为field1的属性,你可以参考。

答案 1 :(得分:2)

您可以使用markInvalid函数。例如:

if (new_val) {
    if(f.field2.getValue() == ''){
        f.field2.markInvalid('Cannot be empty');
    }
} else {
    // clears invalid flags on the field.
    f.field1.clearInvalid();
}

不是说这是使用的确切代码,但您可以从中看到如何标记无效和清除无效消息。虽然我不确定它是否完全符合您的需求,但也可以创建自己的验证器。