ExtJS4:如何在文本框、组合框等旁边显示验证错误消息

Posted

技术标签:

【中文标题】ExtJS4:如何在文本框、组合框等旁边显示验证错误消息【英文标题】:ExtJS4: How to show validation error message next to textbox, combobox etc 【发布时间】:2012-06-03 13:41:29 【问题描述】:

我需要实现显示在无效字段旁边的验证消息。任何帮助将不胜感激。

【问题讨论】:

这是直接的例子。通过它们,您会得到更好的服务。 @DmitryB,感谢您的回复。你能给我一些例子吗?请在下面阅读我对 JohnnyHK 的评论。 我收回我的评论。开箱即用显示完整错误消息的唯一方法是使用 'under' msgTarget - 请参阅此示例中的电话字段:docs.sencha.com/ext-js/4-1/#!/example/form/fieldcontainer.html@Jomet 下面提到元素 ID 女巫需要更多工作,但这就是您将拥有的去做。 【参考方案1】:

msgTarget: 'side' 将在字段右侧添加一个错误图标,仅在悬停时在弹出窗口中显示消息。

如果您仔细阅读文档,msgTarget http://docs.sencha.com/ext-js/4-1/#!/api/Ext.form.field.Text-cfg-msgTarget 的另一个选项是

[element id] 将错误信息直接添加到指定元素的innerHTML中。 您必须使用 id 在控件的右侧动态添加一个“td”。那么如果你指定msgTarget: 'element id' 它将起作用。

【讨论】:

【参考方案2】:

msgTarget: 'elementId' 可以工作,但它似乎非常有限,特别是当您想要一个可重用 ExtJs 组件的多个实例时(以及因此同一个 msgTarget 元素的多个实例)。例如,我有一个 MDI 样式编辑器,您可以在其中在选项卡界面中打开一种类型的多个编辑器。它似乎也不适用于 itemId 或识别 DOM/容器层次结构。

因此,如果我不希望通过设置 msgTarget: none 来完全使用内置消息显示选项之一,然后通过处理专为正是这种情况。在这种情况下,即使有同一个编辑器表单的多个实例,我现在也可以尊重表单的层次结构,因为我可以选择相对于编辑器的错误显示元素。

我是这样做的:


    xtype: 'fieldcontainer',
    fieldLabel: 'My Field Label',
    layout: 'hbox',   // this will be container with 2 elements: the editor & the error
    items: [
        xtype: 'numberfield',
        itemId: 'myDataFieldName',
        name: 'myDataFieldName',
        width: 150,
        msgTarget: 'none',  // don't use the default built in error message display
        validator: function (value) 
            return 'This is my custom validation message. All real validation logic removed for example clarity.';
        
    , 
        xtype: 'label',
        itemId: 'errorBox', // This ID lets me find the display element relative to the editor above
        cls: 'errorBox'     // This class lets me customize the appearance of the error element in CSS
    ],
    listeners: 
        'fielderrorchange': function (container, field, error, eOpts) 
            var errUI = container.down('#errorBox');
            if (error) 
                // show error element, don't esape any HTML formatting provided
                errUI.setText(error, false);
                errUI.show();
             else 
                // hide error element
                errUI.hide();
            
        
    

【讨论】:

【参考方案3】:

查看控件的msgTarget 配置。 msgTarget: 'side' 会将验证消息放在控件的右侧。

【讨论】:

感谢您的回复,但此选项仅在控件右侧放置感叹号图标,而不是消息。我需要出现消息,而不是作为图标的工具提示。【参考方案4】:

使用 msgTarget 'side' 验证右侧,使用 msgTarget 'under' 验证底部

     items: [
                xtype: 'textfield',
                fieldLabel: 'Name',
                allowBlank: false,
                name: 'name',
                msgTarget: 'side',
                blankText: 'This should not be blank!'
            ]

【讨论】:

【参考方案5】:

您可以使用“msgTarget:[元素 ID]”。您必须编写 html 才能使用元素 id 而不是 itemId。验证函数在您设置为“msgTarget”的元素下添加一个列表元素。 如果您想显示验证所需的元素,您可以传递 html 而不仅仅是文本。


    xtype: 'container',
    items: [
        
            xtype: 'textfield',
            allowBlank: false,
            msgTarget: 'hoge'
            blankText: '<div style="color:red;">validation message</div>', // optional
        ,
        
            xtype: 'box',
            html: '<div id="hoge"></div>' // this id has to be same as msgTarget
        
    ]

【讨论】:

【参考方案6】:

要在输入文本框下方/侧显示错误消息,msgTarget 属性仅在您使用表单布局的情况下才有效。

要在表单布局之外解决这个问题,我们需要将元素包装在“x-form-field-wrap”类中。

您可以在线程上找到更多信息: https://www.sencha.com/forum/showthread.php?86900-msgTarget-under-problem

【讨论】:

以上是关于ExtJS4:如何在文本框、组合框等旁边显示验证错误消息的主要内容,如果未能解决你的问题,请参考以下文章

如何使文本框显示与其控件不同的字段?

为啥 WPF 样式在工具提示中显示验证错误适用于文本框但对组合框无效?

如何在 extjs4.1 中水平对齐组合框

文本框获得焦点时,显示旁边的文字

如何在具有嵌套数据的网格中设置组合框值? Extjs 4.2 Mvc

ExtJS 4.1:如何在组合框中设置预选项目?