如何在 Ext.Msg.show 中包含两个文本框

Posted

技术标签:

【中文标题】如何在 Ext.Msg.show 中包含两个文本框【英文标题】:How can i include two textboxes in Ext.Msg.show 【发布时间】:2013-08-14 10:37:51 【问题描述】:

如何修改sencha中的Ext.Msg.show显示两个文本框。现在当我们设置prompt:true时它只支持一个文本框

Ext.Msg.show(
    title: 'Enter values',
    width: 500,
    buttons: Ext.Msg.OKCANCEL,
    multiline: true,
    prompt:true,
);

【问题讨论】:

【参考方案1】:

最简单的解决方案就是创建一个窗口。就像 Evan 在评论中所说的那样,MessageBox 只是一个 Ext.window.Window 宽度有点额外..

一个工作的fiddle

这是一个示例定义:

Ext.define('MyApp.view.Login', 
    extend: 'Ext.window.Window',
    height: 220,
    width: 490,
    layout: 'fit',
    modal: true,
    buttonAlign: 'left',
    closable: false,
    items: [
        
            xtype: 'form',
            frame: false,
            border: 0,
            layout: 
                type: 'hbox',
                align: 'middle'
            ,
            fieldDefaults: 
                msgTarget: 'side',
                labelWidth: 55
            ,
            items: [
                
                    xtype: 'container',
                    flex: 1,
                    padding: 10,
                    layout: 
                        type: 'vbox',
                        align: 'stretch'
                    ,
                    items: [
                        
                            xtype: 'textfield',
                            name: 'username',
                            fieldLabel: 'Username',
                            allowBlank: false,
                            flex: 1
                        ,
                        
                            xtype: 'textfield',
                            name: 'password',
                            fieldLabel: 'Password',
                            inputType: 'password',
                            allowBlank: false,
                            flex: 1
                        
                    ]
                
            ]
        
    ],
    buttons: [
        
            text: 'Login',
            handler: function () 
                Ext.Msg.alert('This is not yet implemented.').show();
            
        
    ]
);

然后你就可以创建并显示窗口了:

Ext.create('MyApp.view.Login').show();

【讨论】:

+1,消息框只是一个带有一些自定义项的Ext.window.Window 这是首选方式。 很好的答案。要在单击按钮时关闭窗口,请在按钮处理程序中使用 this.up('window').close(); 如何获取按钮处理程序中的输入值?【参考方案2】:

Ext.MessageBox 的 msg 属性将呈现为 html,因此您可以告诉它显示两个 HTML 输入,然后通过类似的方式使用来自这些输入的值

Ext.Msg.show(

    title: 'Enter values:',
    width: 500,
    buttons: Ext.Msg.OKCANCEL,
    msg: 'Value1: <input type="text" id="textInput1" /><br />Value 2: <input type="text" id="textInput2" />',
    fn: function (button)
    
        var value1 = document.getElementById('textInput1').value;
        var value2 = document.getElementById('textInput2').value;
    
);

不过,根据您的尝试,使用建议的窗口可能是更好的解决方案

【讨论】:

像这样通过 id 获取元素并不是很灵活。因为您的页面上只能有 1 个这样的消息框。 Id 在页面上应该是唯一的。 @dkwarr87:感谢您的解决方案。这是一个快速修复,帮助我获得了两个文本框 @VDP :虽然我还没有实现它,但也感谢您的回答:)

以上是关于如何在 Ext.Msg.show 中包含两个文本框的主要内容,如果未能解决你的问题,请参考以下文章

如何引用文本框中包含的文本来创建 XML 文件?

如何将存储在 HDFS 中包含行的文本文件转换为 Pyspark 中的数据框?

jQuery:像应用商店中包含的 ios 滚动框一样滚动

在 Visual Studio MFC 中,我可以在组合框中包含文本但在代码中获取 int 吗?

Extjs的几种简单的提示框

如何在引号中包含引号c#