我创建了一个允许用户输入一些文本的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中添加验证器,还是必须创建自定义组件扩展窗口?
答案 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