好的,我有一个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/

10-10 18:03