form 与column 的布局 ,tabPanel , formPanel ,fitlayout ,表单元素 ,控件校验 表单提交的使用

 

 

 

 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>Checkbox TreePanel</title>
<link rel="stylesheet" type="text/css" href="/ext/docs/resources/ext-all.css" />
<script type="text/javascript" src="/ext/docs/resources/ext-base.js"></script>
<script type="text/javascript" src="/ext/docs/resources/ext-all.js"></script>
 
</head>
<body>

 

<script type="text/javascript">
//1  form 与column 的布局 
//2 tabPanel , formPanel ,fitlayout ,表单元素 ,控件校验    表单提交的使用 

Ext.onReady(function(){
    Ext.QuickTips.init();// 浮动信息提示
    Ext.form.Field.prototype.msgTarget = 'side';// 设置控件的错误信息显示位置,主要可选的位置有:qtip,title,under,side,[elementId]
    
	var formPanel = new Ext.FormPanel({
		renderTo:document.body,
		title:'formPanel',
		frame:true, 			//渲染背景颜色
        labelWidth : 60,    	//显示的标签宽度为45 
        labelAlign : "right", 	//标签内容右对齐
        bodyStyle:'padding:2px 10px 10px 2px', //使内部元素和边框 有一定距离 
        width:600,
        items:[{
        	//总体上 用列布局 
        	layout:'column',
        	border:false,
        	labelSeparator:':',
        	items:[{ //第一行开始 
        		columnWidth:.5, // 该列的宽度占总宽度的50%
        		border:true,
        		layout:'form',//第一列的布局用form ,并且占50%宽度
        		items:[{
        			xtype:'textfield',
        			fieldLabel:'姓名',
        			name:'name',
        			anchor:'80%' //输入框的宽度是总宽度的80%,余下的显示错误信息图标  
        		}]
        	},{
        		columnWidth:.25,//添加2个radio 第一个有标题, 第二个没有标题 ,2个radio宽度和等于余下宽度的50%
        		layout:'form',
        		border:false,
        		items:[{
        			style:'margin-top:5px',	// 单选按钮和lable对齐
        			xtype:'radio',
        			fieldLabel:'性别',		// 单选按钮总的类别
        			name:'sex',
        			checked:true,   		//默认选中这个radio 
        			boxLabel:'男' ,			//单选按钮对应显示的值
        			inputValue:'男Value',
        			anchor:'80%' 			//input 宽度80%
        			
        		}]
        	},{
        		//这个radio 没有标签,需要隐藏所有的标签信息 
        		columnWidth:.25,
        		layout:'form',
        		labelWidth:0,		//标签宽度为0
        		labelSeparator:'', 	//没有分隔符
        		hideLabels : true,	// 隐藏这个radio的标签设置
        		border:false,
        		items:[{
        			style:'margin-top:5px',
        			xtype:'radio',
        			fieldLabel:'',
                    boxLabel : '女',
                    name : 'sex',
                    inputValue : '女',
                    anchor : '80%'
        		}]
        		
        	}]//第一行结束 
        	
        	
        },{
    		layout:'column',
    		border:false,
    		labelSeparator:':',
    		items:[{
    			columnWidth:.5,
    			layout:'form',
    			items:[{
    				xtype:'datefield',
    				fieldLabel:'出生日期',
    				name:'birthday',
    				anchor:'80%'
    			}]
    		},{
    			columnWidth:.5,
    			layout:'form',
    			items:[{
    				xtype:'combo',
    				mode:'local',//数据是本地的		
    				store:new Ext.data.SimpleStore({
    					fields:['returnValue','displayText'],
    					data:[[1,'小学'],[2,'中学'],[3, '高中']]
    				}),
    				valueField:'returnValue',//下拉框传到后台的值
    				displayField:'displayText' ,//下拉框显示的数据 
    				hiddenName : 'education',// 大家要注意的是hiddenName和name属性,name只是下拉列表的名称,作用是可通过,而hiddenName才是提交到后台的input的name。如果没有设置hiddenName,在后台是接收不到数据的,这个大家一定要注意。
    				name: 'education',// 再次提醒,name只是下拉列表的名称
    				forceSelection:true ,    //必须选择一个选项
    				allowBlank : false,// 该选项值不允许为空 ,如果为空则提示 blankText
    				blankText: '请选择学历' , // 提交form时,该项如果没有选择,则提示错误信息"请选择学历"
    				emptyText : '选择学历',// 在没有选择值时显示为“选择学历”
    				
    				editable : false,// 不允许编辑 
    				triggerAction : 'all',// 因为这个下拉是只能选择的,所以一定要设置属性triggerAction为all,不然当你选择了某个选项后,你的下拉将只会出现匹配选项值文本的选择项,其它选择项是不会再显示了,这样你就不能更改其它选项了。
    				 fieldLabel : '学历',	// 控件的标题是学历
    				anchor:'80%'
    			}]
    			
    		}]//第二行结束
    		
    	},{
			//第三行开始i
    		layout:'column',
    		border:false,
    		labelSeparator:':',
    		items:[{
    			columnWidth:.35,
    			layout:'form',
    			border:false,
    			items:[{
    				xtype:'checkbox',
        			fieldLabel:'权限',
        			boxLabel:'系统管理员',
        			name:'manager',
        			inputValue:'1',
        			anchor:'80'
    			}]
    		},{
    			columnWidth:.2,
    			layout:'form',
                labelWidth : 0,
                labelSeparator : '',
                hideLabels : true,
                items:[{
                	xtype:'checkbox',
                	fieldLabel:'',
                	name:'manager',
                	boxLabel:'管理员',
                	inputValue:'2',
                	anchor:'80'
                }]
    		},{
    			columnWidth:.2,
    			layout:'form',
                labelWidth : 0,
                labelSeparator : '',
                hideLabels : true,
                items:[{
                	xtype:'checkbox',
                	fieldLabel:'',
                	boxLabel:'普通用户',
                	name:'manager',
                	inputValue:'3',
                	anchor:'80%'
                }]
    			
    		}]//第三行结束
			
		},{
			  //第四行开始
	          layout : 'column',
              border : false,
              labelSeparator : ':',
              items:[{
                  columnWidth : .5,
                  layout : 'form',
                  border : false,
                  items : [{
                      xtype : 'textfield',
                      fieldLabel : '电子邮件',
                      name : 'email',
                      vtype : 'email',// 这里的定义和普通的文本输入框没什么区别,只是多了一个vtypes的属性定义。Vtypes里总共定义了email、url、alpha和alphanum四种类型数据格式,email和url这个不用介绍了,呵呵。alpha是字母和下划线的组合,alphanum是字母、下划线和数字的组合。
                      allowBlank : false,
                      anchor : '80%'

               		}]
              }, {
                  columnWidth : .5,
                  layout : 'form',
                  border : false,
                  items : [{
                           xtype : 'textfield',
                           fieldLabel : '个人主页',
                           name : 'url',
                           vtype : 'url', //验证信息 
                           anchor : '80%'
                  }]

           }] 
			//第四行 结束 
		},{
			//第五行 开始
			  xtype:'tabpanel',
			  plain:true,// 将标签页头的背景设置为透明的
              border : false,
              activeTab : 0,
              height : 235,// 高度设置为235px,
              bodyStyle : 'padding:10px',
              items:[{
            	  //第一个tab
            	  title:'登陆',
            	  layout:'form',
            	  defaults:{
            		  width:230
            	  },
            	  defaultType:'textfield',
            	  items:[{
                      fieldLabel : '登录名',
                      name : 'loginID',
                      allowBlank : false,
                      vtype : 'alphanum', //校验 字符与数字混合 
                      allowBlank : false
            	  },{
                      inputType : 'password',// 密码输入框需要定义input控件的类型为password
                      fieldLabel : '密码',
                      name : 'password',
                      allowBlank : false
               		}]
              },{
            	  //第二个tab
            	  title:'数字时间字母',
            	  layout:'form',
            	  defaults:{
            		  width:230
            	  },
            	  defaultType:'textfield',
                  items : [{
                      xtype : 'numberfield',// 只能输入数字的输入控件
                      fieldLabel : '数字',
                      name : 'number'
		               	},{
		                      xtype : 'timefield',// 时间输入控件
		                      fieldLabel : '时间',
		                      name : 'time'
		               },{
		                      fieldLabel : '纯字母',
		                      name : 'char',
		                      vtype : 'alpha'
		              }]
	           },{
	                  title : '文本区域',
	                  layout : 'fit',// 为了让textarea自适应面板容器,使用了fitlayout作为它的布局
	                  items : {
	                         xtype : 'textarea',// 设置类型为textarea
	                         id : 'area',
	                         fieldLabel : ''
	                  }
	
	           }]
	             //第五行结束 
		}],
		buttons:[{
			text:'保存',
			handler:function(){
				 // 在formpanel类中,form属性指向的是formpanle里的basicform对象,可以通过formpanle.form 来使用该basicform对象
 				 // 保存按钮要做的就是先做basicform的客户端验证,验证通过了则设置该按钮状态为disable,防止2次提交。然后调用formpanle.form.doAction方法提交数据
				 if(formPanel.form.isValid()){
					 this.disabled = true;
					   // doAction方法的第一个参数“submit”的意思是表示执行的是提交操作,提交的后台页面是test.jsp(url:'test.asp'),
                                           //提交方式是post(method:'post'),没有其它提交参数(params:'')
					  formPanel.form.doAction('submit', {
                          url : 'resForm.jsp',
                          method : 'post',
                          params : '',
                          // 提交成功后执行success定义的函数,后台返回的数据格式是需要我们注意的,一定要json格式,而且必须包含“success:true”,不然不会执行success定义的函数。
                          // success定义的函数返回两个参数,第一是form本身,第二个是ajax返回的响应结果,在action.result这个json数组了保存了后台返回的数据。
                          success : function(form, action) {
                                 // 例如返回的json结构是"{success:true,data:'成功保存!'}",
                                 Ext.Msg.alert('操作',  action.result.data);
                                 this.disabled = false;
                          },
                          // 定义failure函数,就是网络通讯存在问题的时候将显示错误信息。
                          failure : function() {
                                 Ext.Msg.alert('操作', '保存失败!');
                                 this.disabled = false;
                          }

                   });   
				 }
			}
		},{

            // 取消按钮就是简单的reset一下form的控件
            text : '取消',
            handler : function() {
            	formPanel.form.reset();
            }
     }]
	});
 
});

</script>
</html>

 

你可能感兴趣的:(FormPanel)