Ext JS 4.1 MessageBox带有文本验证

时间:2012-07-04 13:44:51

标签: extjs4 extjs4.1

我创建了一个允许用户输入一些文本的MessageBox:

Ext.MessageBox.show({
    title : 'Reason',
    msg : 'Your reson:',
    width : 300,
    buttons : Ext.MessageBox.OKCANCEL,
    multiline : true,
    scope : this,
    fn : function(btn, reason){ if (btn == 'ok' && reason != '') this.rejectPlan(rec, reason);}
});

用户看到它并允许输入他的原因,但现在我只能验证他输入的文本是否为空。

我想阻止OK按钮,直到用户输入一些文字(最少20个字符)

我可以在MessageBox中添加验证器,还是必须创建自定义组件扩展窗口?

3 个答案:

答案 0 :(得分:5)

实际上有可能,认为可能需要一些努力才能使其发挥作用。这是一种相当“hacky”的方式,所以请在你自己的题外话中使用它。

    var messageBox = Ext.MessageBox.show({
            title: 'Type Something in!',
            msg: 'Please type something into the text box!',
            width: 300,
            buttons: Ext.MessageBox.OKCANCEL,
            multiline: true,
            fn: function(btn, text, config) {
                //Do your thing
            },
    });

    messageBox.msgButtons.ok.setDisabled(true);
    messageBox.textArea.allowBlank = false;
    messageBox.textArea.on('change', function (e, text, o) {
        if (text.length > 0) {
            messageBox.msgButtons.ok.setDisabled(false);
        } else {
            messageBox.msgButtons.ok.setDisabled(true);
        }
    });

显示后,您可以获得对消息框的引用。创建并显示文本框后,将禁用“确定”按钮,将文本区域设置为不允许空白值。我还附上了一个事件处理程序,它检查文本区域中是否有文本来决定是否启用或禁用ok按钮。

这种“解决方法”非常容易受到API更改的影响,所以要小心。

答案 1 :(得分:3)

您可以将opts参数添加到fn(表示消息框的配置),如果文本为空,则使用相同的配置重新打开消息框。

Ext.MessageBox.show({
    title : 'Reason',
    msg : 'Your reason:',
    width : 300,
    buttons : Ext.MessageBox.OKCANCEL,
    multiline : true,
    scope : this,
    fn : function(btn, reason, cfg){ 
         if (btn == 'ok' && Ext.isEmpty(reason)) { 
            //if you want to mark the text as mandatory

            Ext.MessageBox.show(Ext.apply({}, {msg:cfg.msg}, cfg));  
         } else if (btn =='ok') {
            alert('ok with text');                 
         }
    }
});
​

答案 2 :(得分:0)

您还可以像这样启用字段验证:

  var promptWindow = Ext.Msg.prompt( 'Reason', 'Please enter a reason of reverse:', function( btn, text, cfg ) {
        if( btn === 'ok' && text.length > 128){
            //display warning

            cfg.value = text;
            Ext.MessageBox.prompt( Ext.apply( {}, { msg: cfg.msg }, cfg ) );
        }
        else if ( btn === 'ok' ) {
            //do something on success
        }
    }, this, true );
    promptWindow.textArea.maxLength = 128; //if multiline is enabled
//promptWindow.textField.maxLength = 128; //if multiline is disabled