在做EXT开发中,尽能的是使用上EXT的所有功能,不然就浪费了那500K的身材了,EXT的主要功能之一的FORM组件,验证功能很强大,而且样式也挺好看的。但在使用EXT的form布局来设计表单时,难以直观的看到页面的排板模形,特别是对于习惯了使用<table>来排板<input>等元素的程序员来说,更是难以接受。为了满足习惯性可观的设计表面排板,可以在页面加载完后(Ext.onReady),将EXT的FORM元素自动绑定相应的html form元素,这样则在页面设计时直接使用html中form元素,而不必再关心到EXT排板。
//把ext 对象绑定在Html Form元素时的ext属性中
Ext.override(Ext.Component, {
initComponent :function(){
this.on('render', function(){
if(this.el)
Ext.getDom(this.el).ext = this;
if(this.hiddenField)//Combo
Ext.getDom(this.hiddenField).ext = this;
})
}
});
//获取验证信息
// 将EXT的验证属性写成JSONString格式,保护在val属性中
$getValid = function(el){
var valid = "{}";
if(Ext.getDom(el).attributes['val'])
valid = Ext.getDom(el).attributes['val'].nodeValue;
return valid;
}
//自动绑定Html中的Form元素
$blindFormField = function(){
var objArray = Ext.DomQuery.select("input[type=submit]");
Ext.each(objArray, function(obj) {
var btn = new Ext.Button({
text : obj.value,
applyTo : obj,
handler : obj.onclick,
type : obj.type
});
btn.getEl().replace(Ext.get(obj));
});
var objArray = Ext.DomQuery.select("input[type=reset]");
Ext.each(objArray, function(obj) {
var btn = new Ext.Button({
text : obj.value,
applyTo : obj,
handler : obj.onclick,
type : obj.type
});
btn.getEl().replace(Ext.get(obj));
});
var objArray = Ext.DomQuery.select("input[type=button]");
Ext.each(objArray, function(obj) {
var btn = new Ext.Button({
text : obj.value,
applyTo : obj,
handler : obj.onclick,
type : obj.type
});
btn.getEl().replace(Ext.get(obj));
});
/**
* text and textarea and password and file
*/
var objArray = Ext.DomQuery.select("input[type=text]");
Ext.each(objArray, function(obj) {
if(Ext.getDom(obj).ext) return;
var txtField = new Ext.form.TextField(
Ext.apply({applyTo:obj},eval('('+$getValid(obj)+')'))
);
});
var objArray = Ext.DomQuery.select("input[type=password]");
Ext.each(objArray, function(obj) {
var txtField = new Ext.form.CustomTextField(
Ext.apply({applyTo:obj,inputType:'password'},eval('('+$getValid(obj)+')'))
)
});
var objArray = Ext.DomQuery.select("input[type=file]");
Ext.each(objArray, function(obj) {
});
var objArray = Ext.DomQuery.select("textarea");
Ext.each(objArray, function(obj) {
var txtArea = new Ext.form.TextArea(
Ext.apply({applyTo:obj},eval('('+$getValid(obj)+')'))
);
});
/**
* checkbox and radio
*/
var objArray = Ext.DomQuery.select("input[type=checkbox]");
Ext.each(objArray, function(obj) {
var checkbox = new Ext.form.Checkbox(
Ext.apply({applyTo:obj},eval('('+$getValid(obj)+')'))
);
});
var objArray = Ext.DomQuery.select("input[type=radio]");
Ext.each(objArray, function(obj) {
var radio = new Ext.form.Radio(
Ext.apply({applyTo:obj},eval('('+$getValid(obj)+')'))
);
});
/**
* select or comboBox
*/
var objArray = Ext.DomQuery.select("select");
Ext.each(objArray, function(obj, index) {
var select = new Ext.form.ComboBox(
Ext.apply({transform:obj,triggerAction:'all', forceSelection : true, cls:obj.className},eval('('+$getValid(obj)+')'))
);
});
/**
* number
*/
var objArray = Ext.DomQuery.select("input[type=number]");
Ext.each(objArray, function(obj) {
var dateField = new Ext.form.CustomNumberField(
Ext.apply({applyTo:obj},eval('('+$getValid(obj)+')'))
);
});
/**
* 日期类型
*/
var objArray = Ext.DomQuery.select("input[type=date]");
Ext.each(objArray, function(obj) {
var dateField = new Ext.form.CustomDateField(
Ext.apply({applyTo:obj,format:'Y-m-d',cls:obj.className},eval('('+$getValid(obj)+')'))
);
});
/**
* email类型
*/
var objArray = Ext.DomQuery.select("input[type=email]");
Ext.each(objArray, function(obj) {
var emailField = new Ext.form.TextField(
Ext.apply({applyTo:obj,vtype:'email'},eval('('+$getValid(obj)+')'))
);
});
/**
* 自定义类型
*/
var objArray = Ext.DomQuery.select("input[type=custom]");
Ext.each(objArray, function(obj) {
var m_width = $(obj).width()+7;
var houseinfoField = new Ext.form.HouseInfoArea(
Ext.apply({applyTo:obj,cls:obj.className},eval('('+obj.val+')'))
)
});
}
//验证输入的合法性
$validEl = function(el){
if(typeof(el) == "string") el = document.getElementById(el);
if(el.ext)
return el.ext.validate();
return true;
}
//验证form下所有元素输入的合法性,返回true为合法,false为不合法
$valid2form = function(form){
var valid = true;
var thefrm = form;
if(typeof(form) == "string") var thefrm = document.getElementById(form);
for (i = 0; i < thefrm.elements.length; i++){
var e = thefrm.elements[i];
if(!e.name) continue;
if(!$validEl(e)){
valid = false;
}
}
return valid;
}
Ext.onReady(function() {
setTimeout($blindFormField, 0);
})
//HTML 中的使用代码
<form id='myform' action='action.do' onsubmit=''
<table>
<tr>
<td> 字符串:</td> <td><input type='text' id='string' name='string' val='{allowBlank:false}'/></td>
<td> 数字类型:</td> <td><input type='number' id='number' name='number' val='{allowBlank:false}'/></td>
</tr>
<tr>
<td> Email:</td> <td><input type='email' id='email' name='email' val='{allowBlank:false}'/></td>
<td> 日期类型:</td> <td><input type='date' id='date' name='date' val='{allowBlank:false}'/></td>
</tr>
<tr>
<td> Select:</td>
<td>
<select name='select'>
<option value=1>option1</option>
<option value=2>option2</option>
<option value=3>option3</option>
</select>
</td>
<td> 自定义类型:</td> <td><input type='custom' id='custom' name='custom' val='{allowBlank:false}'/></td>
</tr>
<table>
</form>
如果在页面中存在有两个name一样的情况下,以上代码在IE上执行后,第二个name将无法的元素将不被绑定,原因是在IE下面有个bug,如果某个节点的name跟你要取得节点的名字一样,这样会得到name=youid的那个节点
<input type='text' id='username_id' name='username'/>
<input type='text' id='username' name='username_temp'/>
这样执行alert(document.getElementById('username').id)的结果是username_id而不是username
解决这个BUG的方法一般情况有两种:
方法一:尽量避免在页面中出现name与id属性相同的对象
方法二:利用JavaScript的特点,重写document.getElementById
//IE_BUG_PATCH.js
if (/msie/i.test(navigator.userAgent)){ //根据userAgent确定用户使用IE浏览器
document.nativeGetElementById = document.getElementById;
document.getElementById = function(id){
var elem = document.nativeGetElementById(id);
if(elem){
//确定id相同
if(elem.attributes['id'].value == id){
return elem;
}else{
//如果没有ID相同的,那么就遍历所有元素的集合找到id相同的元素
for(var i=1;i<document.all[id].length;i++) {
if(document.all[id][i].attributes['id'].value == id){
return document.all[id][i];
}
}
}
}
return elem;
};
};
分享到:
相关推荐
在这个“Ext2.0 form使用实例的例程”中,我们将深入探讨Ext 2.0的表单(form)组件及其应用。 表单在任何应用程序中都扮演着至关重要的角色,用于收集和验证用户输入的数据。Ext 2.0的表单组件提供了一整套完整的...
- `layout`: 使用了`"form"`布局,这是Ext中专门为表单设计的布局方式。 - `labelWidth`: 统一设置了所有字段标签的宽度。 - `autoScroll`: 设置为`true`,当表单内容超出容器时自动显示滚动条。 #### 字段配置 ...
"Ext Form GridPanel"是Ext JS库中的一个重要组件,它结合了表格(Grid)和表单(Form)的功能,提供了一种强大而灵活的方式来显示和编辑数据。在Web应用程序开发中,这种组件常用于数据录入和展示,尤其适用于处理...
在压缩包中的`Ext.form.TextField`文件夹,很可能是包含了一个或者多个HTML、JavaScript和CSS文件的示例项目,展示了如何在实际应用中使用`Ext.form.TextField`组件。这些文件通常会包含一个或者多个示例,演示了...
### EXT异步提交FORM表单知识点详解 #### 一、EXT异步提交FORM表单概述 在现代Web应用开发中,异步提交表单是一种常见的技术手段,它能够提升用户体验,减少页面刷新带来的数据丢失风险,并能有效提高系统的响应...
在这个"EXT 2.0 form demo"中,我们将深入探讨EXT在构建动态、交互式表单方面的强大功能。 一、EXT 2.0的核心特性 1. 组件化:EXT 2.0的核心是组件模型,允许开发者将UI元素(如按钮、表格、表单)视为独立的可...
- XTemplate是EXT中用于数据渲染的一种模板引擎,可以将数据动态地插入到HTML中。 - **DataView** - DataView组件用于展示非表格形式的数据集合,如列表、卡片等。 - **其它新组件** - EXT2引入了许多新组件,如...
本文将深入探讨Ext JS中的`Form`控件及其相关配置,帮助开发者更好地理解和掌握如何高效地使用这些控件。 #### 二、Ext JS Form控件概述 Ext JS的`Form`控件提供了一套丰富的API用于创建、管理和验证Web表单。该...
4. 在右侧列中使用Form Panel来创建表单。Form Panel可以包含多个FieldSet,每个FieldSet代表表单的一个部分。 5. 配置Form Panel的layout为Form Layout,这样表单字段会按照预设方式进行排列。 6. 将Grid Panel中的...
`Ext.form.field.ComboBox`是Ext JS框架中一个强大的组件,它提供了下拉列表的功能,可以用于创建选择框或者搜索框,具有自动补全特性。这个组件允许用户通过输入部分文本来筛选下拉列表中的选项,提高数据输入的...
7. **事件处理和数据交互**:在Ext中,事件处理是通过绑定函数到特定组件的事件来实现的。例如,`addForm.applyIfToFields`用于设置表单字段的宽度,`addForm.render`将表单渲染到指定的DOM元素中。服务器端处理后的...
2. **数据绑定**:EXT提供了强大的数据绑定机制,使得数据和界面的更新可以自动同步,简化了数据驱动的应用程序开发。 3. **布局管理**:EXT提供了多种布局模式,如fit、border、form、table等,方便开发者根据需求...
EXT3.0中文API文档是针对EXT JavaScript库的版本3.0所编写的详细参考资料,主要面向前端开发者,特别是那些在Web应用中使用EXT3.0框架进行开发的专业人士。EXT是一个强大的用户界面库,提供了丰富的组件和功能,用于...
EXT 3.3 中包含了许多关键组件和功能,如表格、树形视图、图表、菜单、按钮、表单元素等,这些组件可以用来创建复杂的用户界面。EXT 3.3 提供了高度可定制化和丰富的API,使得开发者可以根据需求调整组件的样式和...
EXT 3.0的布局管理器也是一个关键特性,它能自动管理组件的尺寸和位置,包括Fit布局、Form布局、Table布局等,使得开发者可以轻松构建响应式和自适应的界面。此外,EXT的表单组件如TextField、ComboBox和DateField等...
3. **数据绑定**:Ext的数据绑定机制允许视图组件与数据源直接关联,数据变化时视图会自动更新,反之亦然,实现了数据驱动的开发模式。 4. **Store与Model**:Store是数据容器,可以存储和管理大量的数据记录。...
- **动态生成**:开发者可以通过编程方式动态生成表单元素,例如使用`Ext.Component`或`Ext.form.field.Base`的子类,根据需求动态添加或移除表单字段。 - **数据绑定**:EXT4.3支持双向数据绑定,允许表单字段与...
Ext 3.0的数据绑定机制使得UI组件可以直接与数据源关联,当数据源发生变化时,UI会自动更新,反之亦然。这种双向数据绑定提高了开发效率,简化了代码逻辑。 五、API参考 Ext 3.0的API文档详细列出了所有可用的类、...
在Ext 2.1中,表单(Form)组件也是非常重要的。它们提供了创建和管理HTML表单的能力,支持各种输入类型、验证规则以及数据提交。Ext Form还包含了自定义表单字段、联动控制等高级特性。 对于数据管理,Ext 2.1提供...
3. **数据绑定**:EXT支持数据绑定,这意味着你可以将组件与数据源(如JSON对象或XML文件)关联,当数据改变时,界面会自动更新,反之亦然。 4. **表格和网格**:EXT 2.0中的GridPanel组件提供了高度可定制的表格...