好的,我有一个enslish的vtype并仅签名,看起来像这样:
Ext.apply(Ext.form.VTypes, {
excel: function (v) {
return /^.*.(xls)$/.test(v);
},
excelText: 'Must be an *.xls file',
englishOnly: function (v) {
return /^[a-z0-9,\.\~\!\@\#\$\%\^\&\*\(\)\_\+\<\>]*$/.test(v);
},
englishOnlyTest: 'Must be English letters'
});
现在我有一个看起来像这样的表格:
new Ext.FormPanel({
id: 'add-label-form',
url: hp,
frame: true,
baseParams: { actionName: 'AddLable' },
defaultType: 'textfield',
labelWidth: 70,
items: [{
id: 'tbKey',
fieldLabel: localize.key,
allowBlank: false,
name: 'tbKey',
anchor: '100%'
}, {
id: 'tbHebrewTran',
fieldLabel: localize.hebrew,
allowBlank: false,
name: 'tbHebrewTran',
anchor: '100%'
}, {
id: 'tbEnglishTran',
fieldLabel: localize.english,
allowBlank: false,
name: 'tbEnglishTran',
anchor: '100%'
}, {
id: 'tbDescription',
xtype: 'textarea',
vtype:'englishOnly',
fieldLabel: localize.description,
allowBlank: true,
name: 'tbDescription',
anchor: '100%'
}],
buttons: [{
text: localize.submit,
formBind: true,
handler: onAddLabelSubmitClick
}, {
text: localize.reset,
handler: function () {
var f = Ext.getCmp('add-label-form').getForm();
f.reset();
}
}]
})
调用vtype处理程序并按预期返回false,但是该表单仍然有效,并且屏幕上没有显示警报。
这是为什么?
最佳答案
确保在monitorValid: true
配置中包含FormPanel
。
这是API的注释,其中更详细地说明了config选项:
monitorValid:布尔值
如果为true,则表单监视其
有效状态的客户端并定期
触发clientvalidation事件
通过那个状态。
监视有效状态时,
FormPanel启用/禁用其任何
已配置的按钮
使用formBind配置:true
取决于表格是否有效
或不。默认为false。
进行此设置后,您应该看到按钮已启用/禁用,并且vtype
应用于的任何字段周围都有一个红色轮廓。
更新:
我注意到您将englishOnly
的文本变量定义为englishOnlyTest,我认为应该将其定义为englishOnlyText(您拼写为“ test”而不是“ text”)。如果我没记错的话,框架希望看到文本附加到要用于返回文本的字符串上。这就是为什么您看不到任何红色轮廓或弹出文本的原因。
关于javascript - extjs vtype在textarea上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4488461/