WML(无线标记语言)中的表单功能,其实比很多人想象的要灵活得多。它虽然不像HTML那样拥有丰富的控件,但在移动端的小屏幕上,这些基础元素足够支撑起一个完整的交互流程。下面我们就来拆解一下,WML表单到底是怎么工作的。
表单容器: 的妙用
在WML里,是用来将一组表单选项打包在一起的容器。它的作用有点像HTML里的,但更关键的是,当的ordered属性设为false时,手机会自动生成一个概要卡片(summary CARD),把所有的表单选项列出来,让用户直接点选填写。这个概要卡片正是根据、和来生成的。
语法很简单:
其中title属性是可选的,它既表示表单的名字,也会在概要卡片里作为选项组的标题。表单内容可以是嵌套的、输入框、选单以及必要的提示文本。
文本输入: 的完整解析
WML中的标签,负责处理文本输入。它的属性比HTML要精简,但每个属性都有明确的用途:
- name(必填):指定存储输入文本的变量名。
- title:输入框的标签名,同样会在概要卡片中被用作选项名。
- type:默认值为
text,如果设为password,输入的数据会显示为星号。 - value:在语法和行为上等同于下面的
default属性。 - default:指定输入框的默认值。当用户输入新值时,默认值失效;如果默认值不符合
format属性的规定,手机也会忽略它。 - format:用来格式化输入数据。以下标记可以组合使用,例如“3X”表示三个大写字母或符号,“*M”表示任意多个字符(首字母大写)。具体标记如下:
| 标记 | 描述 |
|---|---|
| A | 任何符号或大写字母(不包括数字) |
| a | 任何符号或小写字母(不包括数字) |
| N | 任何数字(不包括符号或字母) |
| X | 任何符号、数字或大写字母(不可改变为小写) |
| x | 任何符号、数字或小写字母(不可改变为大写) |
| M | 任何符号、数字或大写字母(可改变为小写),默认为首字大写 |
| m | 任何符号、数字或小写字母(可改变为大写),默认为首字小写 |
- maxlength:用户可输入的最大字符数,上限为256。
- emptyok:是否允许用户不填输入框,默认
false(即必须填写)。 - size:输入框的显示长度,目前多数手机不支持。
- tabindex:类似于HTML中的TAB键顺序,数字越大越靠后,目前也未被广泛支持。
来看一个完整的示例——test4.wml,它展示了用户名、密码和评论三个输入框的实际用法:
USERNAME:
PASSWORD:
COMMENTS:
如果把上面中的ordered改为true,再在内加入,看看效果有什么不同?这种差异正是WML表单交互设计的关键所在。
选单控件: 与
WML的选单,功能上类似于HTML的,但多了几个移动端专属的属性。它的语法如下(所有属性均为可选):
- title:与
的title类似,用于概要卡片。 - multiple:是否允许多项选择,默认
false。 - name:存储用户选择项的变量名,其值为
的value属性。如果用户未选择且未用default指定默认值,则变量赋值为空字符串。多项选择时,每个值用分号分隔。 - default:为
name指定的变量赋默认值。 - iname:记录用户选择项的位置索引,从1开始,未选则为0。
- ivalue:记录默认值所在的位置索引。
- :用于将多个
分组,可嵌套,但目前大多数手机尚未支持。 - :表示可选项。其
value属性提供选中后赋给变量的值,onpick属性用于指定用户选中并按下确认键后跳转的URL。
再看一个实际例子——test5.wml,演示了单选和多选两种场景:
Please select a city...
Please select columns...
注意第二个选单中multiple="true",用户可以在新闻、体育、娱乐中多选。另外,option的title属性在概要卡片里会显示,而value则是实际提交的数据。
总的来说,WML表单虽然控件不多,但通过format、emptyok、multiple等属性的组合,完全能满足移动端简单的数据收集需求。理解这些核心机制,对于开发基于WAP的早期应用来说,已经足够了。