认识Dojo中的表单:Form
正如“认识Dojo中的界面控件
”一文中提到的,Dijit库提供了一整套极其强大且灵活的基于Dojo的小部件(Widget),帮助你很方便地增强Web应用的界面和功能。这些小部件包括下拉菜单、弹出菜单、对话框、页面布局、树、进度条、以及表单元素。很显然Dijit让这些控件变得很漂亮,但本文所关注的是它们增强的功能,尤其是对一个基本表单在可用性和有效性方面的增强。
Dijit实现的快速回顾
要在一个页面中使用Dijit所要做的第一件事情就是引入Dojo:
第二步是导入Dijit的主题样式表:
最后一步就是为BODY元素的class属性设置一个主题名:
增强基本表单元素
注意
:本文将使用声明的方法创建小部件。你也可以用编程的方法创建任何部件,参见“认识Dojo中的界面控件”中的dojo.behavior。
增强我们的静态表单的第一步是增强表单元素自身。Dijit为每一种表单元素都提供了至少一种(有时有2-3种)对应了小部件。使用Dijit小部件的声明式创建法,以及dojoType属性,我们很快就能将静态表单中的每一样东西都变成小部件。
好啦,现在我们这些静态的、有点乏味的表单元素已经披上了主题的外衣,而且还具备了更多的功能。关于我们创建的这些小部件,有以下几点需要说明:
- FilteringSelect小部件在以下几个方面具有与原生的SELECT元素相同的功能:
- 初始选中具有selected属性的选项
- 选项集合是固定的,由OPTION元素的value属性及其文本所决定
- 允许键盘操作
- FilteringSelect小部件在原生SELECT元素的基础上添加了如下功能:
- 可以在FilteringSelect的输入框中键入字符,自动完成功能会帮你自动匹配选项。
- 如果输入的值不在选项集合中,用户将看到一条错误提示信息。
- 你将对控件的显示具有更多的控制权。
- Dojo1.5为INPUT元素新加了占位文本功能,因此你再也不用通过手工响应focus/blur事件来完成相同的功能了。
现在既然基本表单都已经变成小部件了,而且也具有了漂亮的主题,我们可以添加基本的输入验证功能了。
用Dojo实现表单验证
就像几乎所有的其他客户端问题一样,针对表单验证Dojo也提供了一套非常好的解决方案。
而且幸运的是,对于基本的表单验证,只涉及到少数几个关键的组件。
dijit.form.ValidationTextBox
对一个表单进行验证的前提之一,是决定哪些元素是必须的。假设第一个输入域是必须的,我们只需要将这个部件的dojoType从dijit.form.TextBox改成dijit.form.ValicationTextBox:
由于required="true"已经加到这个小部件中,一旦用户忘了在输入框中填入任何字符,一个错误图标以及一条提示信息就会显示出来。你可以通过设置missingMessage属性来配置提示信息的内容,否则的话将显示一条通用的错误信息。
如果这个输入框要求对输入的模式进行特殊的验证呢?那就是regExp属性的用武之地了:
现在这个website输入框不仅要求必须有输入,而且输入的内容必须能够通过regExp属性的检测。
dojox.validate提供的验证工具
dojox.validate库包含了一大堆工具函数和正则表达式,用于验证表单元素的值。这些验证函数可以用于电子邮件地址、URL、电话号码、邮政编码等等许多东西。下面是一个在ValidationTextBox上使用dojox.validate的例子:
validator属性是一个指向电子邮件验证函数的引用。如果你不擅长正则表达式dojox.validation就变得非常有用了。这里面还包含了特定于语言的工具包。其API文档提供了dojox.validate工具的完整列表。
dijit.form.Form及其onSubmit事件
现在我们已经设置好了必须的输入域,接下来我们将用dijit.form.Form这个dojoType来增强最外面的这个form元素。
与dijit.form.Form结伴出现的是一个特殊的script元素。这个只用于Dojo的script元素是一个this.validate()测试,作用于dijit.form.Form实例。这个测试将为所有require="true"的元素进行验证。你也可以在这里添加你自己的验证代码。
dijit.form工具集
在上边的例子里,我只涉及了最常使用的Dijit部件。Dijit里还有更多更为强大的表单控件。让我们来看看另外几个很有用的小部件。
DateTextBox
要求用户正确地格式化一个日期将是一场噩梦,尤其当其他表单元素依赖于这个日期域的值的时候。Dijit提供了一个dijit.form.DateTextBox类,它将显示一个用户友好的日历控件让用户选择日期。
CurrencyTextBox
dijit.form.CurrencyTextBox类帮助用户根据地区设置正确地格式化并验证货币值。
Textarea
dojox.form.Textarea类增强了TEXTAREA元素,从而当用户输入的时候能够自动改变高度。
利用DojoX的替代部件增强基本的Dijit部件
DojoX包含了大量的增强的控件,它们和与许多Dijit部件一样好用,而且还解决了许多Dijit部件无法解决的问题。下面介绍几个著名的DojoX表单部件。
BusyButton
dijit.form.Button的确很好用,但如果我希望禁用这个按钮(避免重复提交)并在用户单击的时候提供一个反馈信息(例如“正在提交表单……”)呢?
我们可以用dojox.form.BusyButton做到这些:
CheckedMultiSelect
如何让我们的SELECT元素允许多选?
这是一个使用dojox.form.CheckedMultiSelect部件的好机会:
PasswordValidator
如果我们的网站需要一个允许修改密码的表单怎么办?
dojox.form.PasswordValidator提供了所有拟需要的功能来快速实现它:
注意:
javascript验证并非服务器端验证的替代品。javascript只是通过提供即时响应来增强用户体验。
FileUploader
没有使用任何增强的文件上传控件可能是最差的一种表单控件。dojox.form.FileUploader提供了一个绝佳的解决方案,使上传的过程更为合理。
dojox.form工具集
dojox.form名字空间包含了大量的增强部件,包括:
-
BusyButton 具有特殊的禁用/忙碌标签的按钮
-
CheckedMultiSelect 把你的具有“multiple”属性的SELECT元素变成一系列CheckBox的利器
-
DropDownStack 通过简单的选择来启用/禁用表单元素
-
RangeSlider 通过滑动滑块来选择值
-
Rating 方便地创建打分控件(星级打分)
-
……以及更多其他东西!
小结
Dijit库不仅仅让你的界面元素变得光彩照人,它更是一个能让你、开发者、以及你的用户的生活都更美好一些的庞大工具集。
相关资源:
本文翻译自:http://www.sitepen.com/blog/2010/08/11/dive-into-dijit-forms/
分享到:
相关推荐
标题中的“多文件上传 dojo组件 dojox.form.FileUploader”是指使用Dojo JavaScript库中的dojox.form.FileUploader组件来实现网页上的多文件上传功能。Dojo是一个强大的JavaScript框架,它提供了丰富的UI组件和工具...
8. **dojo/dom-form**:处理HTML表单的模块,可以方便地读取或设置表单数据。在测试中,可能会用到这个模块来模拟用户交互。 9. **dojo/parser**:解析dojo属性和声明式创建部件。在测试中,需要确保部件被正确解析...
在Dojo 1.8.3版本中,主要包含以下几个关键知识点: 1. **模块系统**:Dojo 使用AMD(Asynchronous Module Definition)模块定义系统,允许异步加载和组织代码,提高了页面加载速度并降低了代码间的耦合度。require...
Dojo还提供了处理表单的方法,如`dojo.form.toQueryObject`和`dojo.form.toJson`,可以方便地将表单数据转换为查询字符串或JSON格式,便于发送到服务器。 **Dojo Declarative Approach** Dojo允许声明式编程,通过...
Dojo中的Widget系统是另一个重要部分,它包含了大量的UI组件,如按钮、表单元素、日历等,方便开发者构建富客户端应用。这些组件基于dojo/_base/declare创建,具有良好的可定制性和可扩展性。例如,`dijit/form/...
在Dojo 1.1.0版本中,引入了一些新特性,如增强的dojo.xhr模块,改进了模块加载性能,以及对IE6和7的更好支持。这个版本被认为是稳定且功能丰富的,适合用于大型项目。 综上所述,Dojo作为一个全面的JavaScript...
首先,Dojo通过其`dijit.form`模块提供了一套完整的表单组件,这些组件内建了验证功能。例如,`dijit.form.ValidationTextBox`是具有验证功能的文本框,它可以验证输入的邮箱、数字、日期等格式。表单验证可以通过...
在这个例子中,我们首先引入了DOJO库,然后使用`require`函数加载了`dijit/form/Button`模块和`dojo/domReady!`模块。`Button`模块用于创建按钮,而`domReady!`确保在DOM加载完成后执行代码。当按钮被点击时,`...
- **UI组件**:Dojo包含一套完整的UI组件库,如按钮、表单、对话框、布局容器等,这些组件具有良好的可定制性和可扩展性。 - **数据绑定**:Dojo支持数据模型与视图之间的双向绑定,通过`dijit.form....
Dojo提供了一个名为`dijit/form/Form`的组件,可以轻松创建包含输入字段和提交按钮的表单。例如: ```html <form dojoType="dijit.form.Form" id="loginForm"> <input dojoType="dijit.form.TextBox" type="text" ...
"Dojo Widget Overview"可能详细介绍了Dojo的组件系统,包括按钮、表单元素、布局容器等。Dojo的部件设计灵活,可以进行高度定制,同时支持主题化,以适应不同风格的网站设计。常见的Dojo部件有dijit.form.Button...
3. **DOJO Widget系统**:DOJO提供了丰富的UI组件,如按钮、表单控件、布局容器等,通过Widget系统,开发者可以快速构建复杂的用户界面。 4. **DOJO数据管理**:DOJO支持各种数据存储和数据绑定,如`dojo/data`模块...
这使得开发者能更轻松地处理复杂的数据驱动视图,比如`dojo/data`和`dijit/form`模块提供了数据绑定和表单处理的功能。 3. **DOM操作**:Dojo提供了`dojo/dom`和`dojo/query`模块,用于高效地操作DOM元素。它们提供...
9. **dijit/form**:Dijit是Dojo的UI组件库,其中`dijit/form`包含了各种表单控件,如输入框、复选框、下拉选择框等,提供了丰富的样式和行为支持。 10. **dojox**:除了核心的dojo和dijit模块外,dojox库提供了更...
3. **Widget系统**:Dojo 提供了一套完整的组件系统,1.5版本中对这些组件进行了优化,包括表单元素、布局容器、数据绑定等,使得开发者能够快速构建用户界面。 4. **DOH测试框架**:Dojo Object Harness (DOH) 是...
2. **Dojo Toolkit组件**:Dojo 提供了大量的UI组件,如按钮、表单、表格、布局等。在demo中,你可以看到这些组件的使用示例,学习如何创建交互式的用户界面。 3. **数据绑定**:Dojo的数据绑定功能允许开发者将...
它提供了一套完整的组件库,包括按钮、表单元素、布局容器等,如`dijit/form/Button`、`dijit/layout/BorderContainer`等。这些组件可以通过属性和样式进行高度定制,同时支持数据绑定和事件处理。 数据管理在Dojo ...
标题 "dojostateful 实现表单数据绑定" 涉及到的是Dojo Toolkit中的一个关键特性,即Stateful模式,它在处理...在实际项目中,结合Dojo的其他模块和功能,如`dijit/form`组件和数据存储,可以构建出强大的表单应用。
在学习过程中,了解不同版本间的特性差异是很有帮助的,因为随着时间的发展,Dojo不断更新和完善,新版本可能会引入新的API和功能。 Dojo的核心概念之一是模块化。通过`require`函数,我们可以按需加载所需的模块,...
DOJO也支持通过xhr.form方法模拟HTML表单的提交。这个方法可以方便地将表单数据转换为请求参数,发送到服务器,同时处理响应。 8. **DOJO的Deferred对象** DOJO引入了 Deferred 对象,用于管理异步操作的回调链。...