最近正在用ExtJs2.2开发项目的UI,至于为何要用ExtJs开发这个就不说了,看了官方的demo就知道了。由于对JS不是很
熟,开发中遇到了不少的问题,在此也要感谢网上那些无私奉献的朋友们,正是有了你们,才坚定了学习ExtJs的信心。
为了自身查阅方便,也为了给网友们一些参考,写点文章。有错误的地方,还请各位大侠指正。
//loginForm为FormPanel
var formValues1= Ext.getCmp("loginForm").getForm().getValues(false);//返回表单字段数组对象
var formValues2 = Ext.getCmp("loginForm").getForm().getValues(true);//返回表单字符串
alert(formValues2.userNo);//返回表单中字段为userNo的值
alert(formvalues2);//返回表单字段的键值对,字段间以&隔开
给表单第一个字段设置焦点:
如果是window
listeners: {
'show': function() {
this.findByType('textfield')[0].focus(true, true); //第一个textfield获得焦点
}
},
如果是formpanel可以加如下代码
listeners : {
'render' : function() {
this.findByType('textfield')[0].focus(true, true); //第一个textfield获得焦点
}
},
都蛮好用的。
隐藏标签:
{
xtype: 'textfield',
name: 'FID',
id: 'FID',
hidden: true,
hideLabel:true
}]
});
只需将textfield的hidden和hideLabel配置为true就可以了。只设置hidden:true时会显示出来一个:的标签。
ExtJs form Ajax提交:
function login() {
Ext.QuickTips.init();
// Ext.Msg.alert("系统提示","login.js is here");
var loginForm = new Ext.form.FormPanel({
id : 'loginForm',
baseCls : 'x-plain',
plain : true,
defaults : {
anchor : '95%'
},
defaultType : 'textfield',
items : [{
id : 'userNoFromKey',
name : 'userNoFromKey',
hidden : true,
hideLabel : true
}, {
id : 'userNo',
name : 'userNo',
fieldLabel : '用户名',
blankText : "用户名不能为空!",
allowBlank : false
}, {
id : 'pwdFromKey',
name : 'pwdFromKey',
hidden : true,
hideLabel : true
}, {
id : 'password',
name : 'password',
fieldLabel : '密 码',
inputType : 'password',
blankText : "密码不能为空!",
allowBlank : false
}, {
id : 'serialIdFromKey',
name : 'serialIdFromKey',
hidden : true,
hideLabel : true
}
]
});
var loginWin = new Ext.Window({
title : '一卡通系统登录页面',
width : 500,
height : 180,
items : loginForm,
plain : true,
bodyStyle : 'padding:5px;',
buttonAlign : 'center',
layout : 'fit',
buttons : [{
text : '登录',
handler : submitForm
}, {
text : '重置',
handler : resetForm
}],
listeners : {
'show' : function() {
this.findByType('textfield')[0].focus(true, true); // 第一个textfield获得焦点
}
}
});
function submitForm() {
//alert("submit...");
var form = Ext.getCmp("loginForm").getForm();
if (form.isValid()) {
//alert("isvalid");
form.submit({
url : 'login.do?method=login',
method : 'POST',
success:function(form,action)
{
var isSucc = action.result.success;
if(isSucc)
{
var forward = action.result.data;
//alert(forward);
window.location.href=forward;
}
else
{
Ext.Msg.alert("系统提示", "用户登录失败");
}
},
failure : function(form, action) {
Ext.Msg.alert("系统提示", "用户登录失败");
}
});
}
}
function resetForm() {
alert("reset...");
Ext.getCmp("loginForm").getForm().reset();
}
loginWin.show();
}
Ext.onReady(login);
ExtJs 的form默认采用Ajax提交,如果必须采用普通form提交,则必须实现
var myForm = new Ext.form.FormPanel({
onSubmit: Ext.emptyFn,
submit: function() {
this.getForm().getEl().dom.submit();
}
});//来自API解释
代码如下:
Ext.onReady(function()
{
Ext.QuickTips.init();
var form1 = new Ext.form.FormPanel({
baseCls : 'x-plain',
renderTo:"loginForm", //要渲染的div
labelWidth: 75, // label settings here cascade unless overridden
method:'POST',
bodyStyle:'padding:5px 5px 0',
width: 400,
defaults: {width:300},
defaultType: 'textfield',
//实现非AJAX提交表单一定要加下面的两行!
onSubmit: Ext.emptyFn,
submit: function()
{
this.getEl().dom.action= 'index.jsp'; //连接到服务器的url地址
this.getEl().dom.submit();
},
items: [{
fieldLabel: '用户名',
id: 'username',
name: 'name',
allowBlank:false,
blankText : "用户名不能为空",
width:360
},{
fieldLabel: '密码',
blankText : "密码不能为空",
id: 'password',
name: 'pwd',
allowBlank:false,
minLength : 6,
width:360,
inputType:'password' //类型为password
}
],
buttons: [{
text: '登录',
type:'button',
id:'login',
handler: function()
{
//表单验证通过
if (form1.form.isValid())
{
//提交form
form1.form.submit();
}
}
},{
text: '重置',
type:'reset',
id:'clear',
handler: function()
{
form1.form.reset();
}
}
]
});
//将form添加window中
var window = new Ext.Window({
title: '用户登录',
width:500,
height:200,
layout: 'fit',
plain:true,
bodyStyle:'padding:5px;',
buttonAlign:'center',
items: form1
});
//显示window
window.show();
});