EXTJS 4 如何实现radio group(单选按钮组)的校验功能?
问题解答
你需要重写单选按钮组(Ext.form.RadioGroup)的getErrors校验方法,补充选中状态的检测逻辑即可实现需求。
原生RadioGroup的
allowBlank: false配置默认不会触发未选中场景的校验,核心原因是默认的getErrors方法没有判断组内是否存在选中的单选按钮,因此需要手动补全该逻辑。
全局重写方案(对所有RadioGroup生效)
Ext.override(Ext.form.RadioGroup, { getErrors: function (value) { // 调用父类原有逻辑获取默认错误 const errors = this.callParent(arguments); // 判断是否有选中项:无选中项时RadioGroup的getValue返回null const hasChecked = this.getValue() !== null; // 不允许为空且无选中项时追加错误提示 if (!this.allowBlank && !hasChecked) { errors.push(this.blankText || '请选择一个选项'); } return errors; } });
单实例重写方案(仅对当前组件生效)
如果不需要全局修改,创建组件时直接自定义方法即可:
{ xtype: 'radiogroup', allowBlank: false, blankText: '请选择对应的选项', items: [ { boxLabel: '选项1', name: 'radio', inputValue: '1' }, { boxLabel: '选项2', name: 'radio', inputValue: '2' } ], // 自定义当前实例的校验方法 getErrors: function (value) { const errors = this.callParent(arguments); const hasChecked = this.getValue() !== null; if (!this.allowBlank && !hasChecked) { errors.push(this.blankText); } return errors; } }
- 重写完成后,表单提交校验或调用组件
validate()方法时,会自动识别未选中状态,展示和其他表单项一致的错误标记效果 - 如果需要自定义错误样式,可以结合组件的
invalidCls配置修改标记样式
内容的提问来源于stack exchange,提问作者Armando
相关产品推荐
相关产品推荐

