关于extjs的Ext.MessageBox.prompt和非空验证方法
2015-02-13 11:41
369 查看
前两天接到新需求,退回功能的退回原因改为必填,原来是可以为空的,原来的退回是点击之后弹出一个提示框,里面可以填退回原因,代码(1)如下:
但是当验证里面的txt是不是为空时才发现Ext.MessageBox.prompt方法里面点击之后会直接关闭消息框,这样就达不到想要的效果,试了各种方法都不行,所以决定自己写一个window,弹出个跟Ext.MessageBox.prompt类似的东西,首先定义一个FormPanel面板,在这里面写退回原因,代码(2)如下:
然后再在退回方法里写一个window,用来存放上面的FormPanel,并达到和Ext.MessageBox.prompt类似的弹出效果,代码(3)如下:
用第三段代码代替第二段即可,这样就可以实现上面说的功能,可能有人会问为什么不把(2)(3)一起写进退回方法里,为什么还要分开来写,其实我在这里也是摔过一个有跟头,一开始的时候我也是这么想的,也这么做了,但是,测试结果表示:当我点退回或确定后,在点退回的时候,我输入退回原因的FormPanel面板会消失,终于发现,原来我是每次点击无论是确定还是退回的时候都要把原来的面板hide掉,所以下一次打开的时候就会出现上面提到的错误,所以我先在hide掉之后先把我的面板reset()一下,保持面板清洁,最重要的就是把FormPanel和window分开来,到这里这个问题就解决了。
ps:由于我的好多页面都涉及到到了这个功能,而每一个页面都是以一个标签页的方式打开的,所以为了避免标签页之间冲突,一定要把FormPanel定义成不同的变量。
Ext.MessageBox.prompt("输入框","请输入退回原因:",function(bu,txt){ if(bu == "ok") { …… } },this,150);
但是当验证里面的txt是不是为空时才发现Ext.MessageBox.prompt方法里面点击之后会直接关闭消息框,这样就达不到想要的效果,试了各种方法都不行,所以决定自己写一个window,弹出个跟Ext.MessageBox.prompt类似的东西,首先定义一个FormPanel面板,在这里面写退回原因,代码(2)如下:
var addWin; var formPanelCf = new Ext.form.FormPanel({ autoWidth:true, layout:"form", frame:true, labelWidth:260, labelAlign:"right", items:[{ xtype:"label", height : 20, text :"请输入退回原因:" },{ xtype : "textarea", inputType : 'text', height : 150, hideLabel : true, id:"cancelarea", anchor : "95%" }] });
然后再在退回方法里写一个window,用来存放上面的FormPanel,并达到和Ext.MessageBox.prompt类似的弹出效果,代码(3)如下:
if (!addWin) { addWin = new Ext.Window({ title:"提示", modal:true, width:400, height:250, collapsible:false, resizable:false, closeAction:'hide', //items:[formPanelCf] // 将关闭窗口动作设置为隐藏(不销毁窗口对象) items : formPanelCf, buttons : [{ text : '确定', handler : function(){ var txt = Ext.getCmp('cancelarea').getValue(); if(txt == null || txt == ''){ Ext.Msg.alert('提示','请输入退回原因!'); }else{ var pkArray = []; for(var i = 0, len = records.length; i < len; i++) { var pk = records[i].get(thisButton.idName); pkArray.push(pk); } Ext.Ajax.request({ url : thisButton.deleteActionUrl, params : { 'dataReportGuid' : pkArray, 'drIndexDataReport.backreason':txt }, method : 'POST', success : function(response) { Ext.Msg.alert('提示', '退回成功!'); addWin.hide(); formPanelCf.getForm().reset(); gridPanel_data.getStore().reload(); }, failure : function(response) { Ext.Msg.alert('提示', '退回失败!'); } }); addWin.hide(); formPanelCf.getForm().reset(); } //alert(Ext.getCmp('cancelarea').getValue()); } }, { text : '取消', handler : function(){ addWin.hide(); formPanelCf.getForm().reset(); } }] }); } addWin.show();
用第三段代码代替第二段即可,这样就可以实现上面说的功能,可能有人会问为什么不把(2)(3)一起写进退回方法里,为什么还要分开来写,其实我在这里也是摔过一个有跟头,一开始的时候我也是这么想的,也这么做了,但是,测试结果表示:当我点退回或确定后,在点退回的时候,我输入退回原因的FormPanel面板会消失,终于发现,原来我是每次点击无论是确定还是退回的时候都要把原来的面板hide掉,所以下一次打开的时候就会出现上面提到的错误,所以我先在hide掉之后先把我的面板reset()一下,保持面板清洁,最重要的就是把FormPanel和window分开来,到这里这个问题就解决了。
ps:由于我的好多页面都涉及到到了这个功能,而每一个页面都是以一个标签页的方式打开的,所以为了避免标签页之间冲突,一定要把FormPanel定义成不同的变量。
相关文章推荐
- 关于验证CheckBoxList非空的方法
- Extjs 4.2 中 Ext.MessageBox.msgButtons[0].setText()方法没有效果
- Ext.MessageBox学习,包括alert,confirm,prompt,wait和show的使用方法
- extjs4 多个模态 modal 窗口在IE8下第二个模态窗口及 Ext.MessageBox被modal窗口被遮盖的解决方法
- ExtJS让被遮盖的窗体显示在最前面以及解决Ext.MessageBox提示框被TabPanel覆盖的方法【转】
- 【求助】寻求关于用VS.NET2003制作带有序列号验证WEB应用程序安装包的方法
- Ext.MessageBox.show()方法的使用
- 关于PHP中出现乱码和Sessions验证问题的解决方法!
- 关于Ext.MessageBox属性
- Ext研究(1)——关于Function类的一些新方法的使用
- ExtJs 备忘录(9)—— Ext常用属性、方法小结 [系列完]
- ExtJS学习笔记(1)-表单验证,Ext.FormPanel
- session对象关于removeValue方法的验证
- ExtJs系列(1)--Ext.MessageBox
- EXTJS 学习总结(4-2) FormPanel中控件的验证方法
- 关于Extjs API文档——阅读方法
- 关于Ext.onReady的三种调用方法
- gwt-ext中关于FormPanel的数据的验证:
- 关于PHP中出现乱码和Sessions验证问题的解决方法!
- Ext中关于Function类的一些新方法的使用